• numpy和matplotlib使用


    Numpy库

    一、概述。

      numpy 库处理的最基础数据类型是由同种元素构成的多维数组(ndarray),简称“数组”。 数组中所有元素的类型必须相同,数组中元素可以用整数索引,序号从0开始。ndarray 类型的维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。一维数组的秩为1,二维数组的秩为2,二维数组相当于由两个一维数组构成。

      为了使代码简洁,用以下方法引用:

    import numpy as np 

    二、常用创建数组函数。

     部分实例代码如下:

    1 import numpy as np 
    2 print('(1)
    ',np.array([1,2,3],dtype=int)) #创建数组,dtype是数据的类型
    3 print('(2)
    ',np.arange(1,10,2))          #x到y,i为步长
    4 print('(3)
    ',np.linspace(1,10,10))        #x到y,等分成n个元素
    5 print('(4)
    ',np.random.rand(3,3))  #随机生成m行n列的数组
    6 print('(5)
    ',np.ones((2,2),int))  #全为一  
    7 c = np.indices((3,3))         #创建m行n列的数组
    8 print('(6)
    ',c)

    三、nadarray类(数组)。

    (1)常用属性。

     

    (2)形态操作方法。

      部分实例代码如下:

    1 c1 = np.array([[1,2,3],[4,5,6],[7,8,9]])   #创建数组c1=[[1,2,3],[4,5,6],[7,8,9]]
    2 print('(7)
    ',c1)
    3 print("数组的结构{},总个数{},类型{},每个字节的大小{}".format(c1.shape,c1.size,c1.dtype,c1.itemsize))

    四、算术运算函数。

      在进行数组运算时,可以先将原始数组进行复制,再进行操作。这样在后续操作过程中就不会改变原始数组的值。(用上面的数组c1)

    c2 = c1.copy()                           #复制,这样之后的计算就不会改变原数组

     其它运算函数:

     ps : numpy库还提供了

      ①一些比较运算函数;

      ②标准的三角函数:sin()、cos()、tan()。arcsin,arccos,和 arctan 函数返回给定角度的 sin,cos 和 tan 的反三角函数。这些函数的结果可以通过 numpy.degrees() 函数将弧度转换为角度。

      ③舍入函数:numpy.around() 函数返回指定数字的四舍五入值,等等。

    部分代码实例:

    1 print("(9)
    ",np.ceil(c2))           #numpy.ceil():返回大于或者等于指定表达式的最小整数,即向上取整
    2 print("(10)
    ",np.floor(c2))          #np.floor()返回不大于输入参数的最大整数。(向下取整)

    Matplotlib库

    一、概述。

      matplotlib 是提供数据绘图功能的第三方库,其pyplot 子库主要用于实现各种数据展示图形的绘制。可与numpy库搭配使用,是数据可视化的重要方法。

    为了使代码简洁,用以下方法引用:

    import matplotlib.pyplot as plt

    二、应用。

    matplotlib.pyplot 库默认情况不支持中文,若用中文标识图表,可在代码中用以下方法:

    1 import matplotlib
    2 matplotlib.rcParams['font.family'] = 'KaiTi'
    3 matplotlib.rcParams['font.sans-serif'] = ['KaiTi']   #KaiTi为楷体

    实例:

     1 import matplotlib.pyplot as plt
     2 import numpy as np
     3 import matplotlib
     4 matplotlib.rcParams['font.family'] = 'KaiTi'
     5 matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
     6 x = np.arange(1,11) 
     7 y =  2  * x +  5  
     8 plt.title("测试")
     9 plt.xlabel('x轴')
    10 plt.ylabel('y轴')
    11 plt.plot(x,y,'oc')
    12 plt.show()
    代码解析:
    plt.title('')设置标题;
    plt.xlabel('')设置x轴名称;
    plt.ylabel('')设置y轴名称;
    plt.plot(x,y,'oc') 根据x,y绘制直/曲线条;其中'oc'为设置的标记和标记颜色的简略使用(o圆标记,c青色)。(详见如下)
    plt.show() 展现图。

    上面代码,图呈现如下:
    
    

     样式与颜色设置:

    '-'      实线样式 
    '--'     短横线样式 
    '-.'     点划线样式 
    ':'      虚线样式 
    '.'      点标记 
    ','      像素标记 
    'o'     圆标记 
    'v'     倒三角标记 
    '^'     正三角标记 
    '<'  左三角标记 
    '>' 右三角标记 
    '1'     下箭头标记
    '2'     上箭头标记 
    '3'     左箭头标记 
    '4'     右箭头标记 
    's'     正方形标记 
    'p'     五边形标记 
    '*'     星形标记 
    'h'     六边形标记 1 
    'H'    六边形标记 2 
    '+'     加号标记 
    'x'      X 标记 
    'D'     菱形标记 
    'd'     窄菱形标记 
    '|' 竖直线标记 
    '_'     水平线标记 

    以下是颜色的缩写:
    'b'                       蓝色 
    'g'                       绿色 
    'r'                        红色 
    'c'                       青色 
    'm'                   品红色 
    'y'                       黄色 
    'k'                       黑色 
    'w'                      白色 

    三、具体的图表函数。

    (1)图标绘制。

    ps : 还可以用plt 绘制极坐标图、饼图、功率谱密度图、谱图、散点图、直方图、数据日期,等等图表。

     (2)读取和显示函数。

     !   用plt.imsave()进行保存。

    四、plt 库的绘图区域函数。

    (1)使用figure()函数创建一个全局绘图区域:plt.figure(figsize=(8,4))(单位英寸)

    (2)subplot()都用于在全局绘图区域内创建子绘图区域,其参数表示将全局绘图区域分成nrows 行和ncols 列,并根据先行后列的计数方式在plot_number 位置生成一个坐标系。【plt.subplot(r , c , d)  :  全局绘图区域被风割成 r × c 的网格,其中,在第d个位置绘制了一个坐标系】

    ——>若想在同一图中绘制不同的东西,就可以用plt.subplot()函数。实例如下:

     1 import numpy as np 
     2 import matplotlib.pyplot as plt 
     3 # 计算正弦和余弦曲线上的点的 x 和 y 坐标 
     4 x = np.arange(0,  3  * np.pi,  0.1) 
     5 y_sin = np.sin(x) 
     6 y_cos = np.cos(x)  
     7 # 建立 subplot 网格,高为 2,宽为 1  
     8 # 激活第一个 subplot
     9 plt.subplot(2,  1,  1)  
    10 # 绘制第一个图像 
    11 plt.plot(x, y_sin) 
    12 plt.title('Sin')  
    13 # 将第二个 subplot 激活,并绘制第二个图像
    14 plt.subplot(2,  1,  2) 
    15 plt.plot(x, y_cos) 
    16 plt.title('Cos')  
    17 # 展示图像
    18 plt.show()

    ps : 在设置x轴范围是有个参数“0.1”,这是为了让函数图像平滑,也就是绘制0.1步长的点。如果不设置,就会出现下列结果。

    图像手绘效果实现
    用下列代码将一张图输出为手绘效果:
     1 from PIL import Image
     2 import numpy as np
     3 vec_el = np.pi/2.2           #光源的俯视角度,弧度值
     4 vec_az = np.pi/4.          #光源的方位角度,弧度
     5 depth =10.                    #(0-100)
     6 im = Image.open("********").convert('L')
     7 a = np.asarray(im).astype('float')
     8 grad= np.gradient(a)       #取图像灰度的梯度值
     9 grad_x,grad_y= grad          #分别取横纵图像梯度值
    10 
    11 grad_x = grad_x*depth/100.
    12 grad_y = grad_y*depth/100.
    13 dx = np.cos(vec_el)*np.cos (vec_az) #光源对x轴的影响
    14 dy =np.cos (vec_el)*np.sin(vec_az) #光源对y轴的影响
    15 dz = np.sin(vec_el)
    16 A =  np.sqrt(grad_x**2+grad_y**2 + 1.)
    17 uni_x = grad_x/A
    18 uni_y = grad_y/A
    19 uni_z = 1./A
    20 a2 = 255*(dx*uni_x+dy*uni_y+dz*uni_z)
    21 a2 = a2.clip(0,255)
    22 im2 = Image.fromarray(a2.astype('uint8'))
    23 im2.save('*****')

    原图:

     手绘效果展示:

    绘制python123作业雷达图

    此处小编用更加好用的pyecharts库进行绘制,代码如下:

    1 from pyecharts import Radar
    2 radar = Radar("2019310143110","python123作业成绩")
    3 data = [[80,110,100,97,110,80]]                                                                    #成绩
    4 week = [("第一周",80),("第二周",110),("第三周",100),("第四周",100),("第五周",110),("第六周",80)]      #80,110等数据为满分情况
    5 radar.config(week)
    6 radar.add("作业成绩",data,is_label_show = True)
    7 radar.render("m.html")

    自由落体位移,图实现

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib
    matplotlib.rcParams['font.family'] = 'KaiTi'
    matplotlib.rcParams['font.sans-serif'] = ['KaiTi']
    x = np.arange(0, 60 , 0.1) 
    y = 9.8*pow(x,2)/2000
    plt.title("初速度为0,加速度为9.8m/s的加速运动的位移s(自由落体位移)")
    plt.xlabel('时间t/秒')
    plt.ylabel('位移s/千米')
    plt.plot(x,y,'-.r')
    plt.show()

    知识来源

    [1]Python语言程序设计 . 北京理工大学 嵩天 . 科学计算与可视化。

    [2]菜鸟驿站 . numpy的学习。

  • 相关阅读:
    解决上传文件大小限制 PHP+Apache
    PHP中ftp的连接与操作
    python 批量修改文件名
    pytorch 断点续训练
    图片的读取
    tensor 类型转换
    卷积网络提取图像特征
    U盘拷贝数据到服务器
    1*1卷积核的作用
    skimage
  • 原文地址:https://www.cnblogs.com/nicefurmine/p/12837946.html
Copyright © 2020-2023  润新知