zoukankan      html  css  js  c++  java
  • Numpy与Matplotlib

    一、Numpy

    numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库!

    numpy比Python列表更具优势,其中一个优势便是速度。在对大型数组执行操作时,numpy的速度比Python列表的速度快了好几百。因为numpy数组本身能节省内存,并且numpy在执行算术、统计和线性代数运算时采用了优化算法。

    numpy的另一个强大功能是具有可以表示向量和矩阵的多维数组数据结构。numpy对矩阵运算进行了优化,使我们能够高效地执行线性代数运算,使其非常适合解决机器学习问题。

    与Python列表相比,numpy具有的另一个强大优势是具有大量优化的内置数学函数。这些函数使你能够非常快速地进行各种复杂的数学计算,并且用到很少代码(无需使用复杂的循环),使程序更容易读懂和理解。

    1、简单创建数组

    a = [1, 2, 3]
    b = np.array(a)
    c = np.array([[0, 1, 2, 10],
                  [12, 13, 100, 101],
                  [102, 110, 112, 113]], int)
    print(c)
    print(b)

    2、创建随机数组

    array_rand = np.random.rand(10, 10, 4)
    print(array_rand)
    print(array_rand.ndim)

    3、数组的复制

    after_array = array_normal[:3, 2:4].copy()
    copy_array = np.copy(array_normal[:, 2:4])

    4、数组运算

    # 循环数组行和列,每一个数值都加5
    score[:, :] = score[:, :]+5
    print(score)
    # 循环数组行和列,每一个数值都减5
    score[:, :] = score[:, :]-5
    print(score)
    # 循环数组行和列,每一个数值都乘以5
    score[:, :] = score[:, :]*5
    print(score)
    # 循环数组行和列,每一个数值都除以5
    score[:, :] = score[:, :]/5
    print(score)
    # 循环数组行和列,每一个数值除以5取整
    score[:, :] = score[:, :] // 5
    print(score)
    # 循环数组行和列,每一个数值除以5取模
    score[:, :] = score[:, :] % 5
    print(score)

     

    二、Matplotlib

    Matplotlib 是Python中类似 MATLAB 的绘图工具,熟悉 MATLAB 也可以很快的上手 Matplotlib。

    1matplotlib图标正常显示中文

    import matplotlib.pyplot as plt
    plt.rcParams['font.sas-serig']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

    2、为项目设置matplotlib参数

    配置文件包括以下配置项

    axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
    backend: 设置目标暑促TkAgg和GTKAgg
    figure: 控制dpi、边界颜色、图形大小、和子区( subplot)设置
    font: 字体集(font family)、字体大小和样式设置
    grid: 设置网格颜色和线性
    legend: 设置图例和其中的文本的显示
    line: 设置线条(颜色、线型、宽度等)和标记
    patch: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
    savefig: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
    verbose: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
    xticks和yticks: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。

    3颜色

    可以通过调用matplotlib.pyplot.colors()得到matplotlib支持的所有颜色。

    别名

    颜色

    别名

    颜色

    b

    蓝色

    g

    绿色

    r

    红色

    y

    黄色

    c

    青色

    k

    黑色

    m

    洋红色

    w

    白色

     

    三、雷达图

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib
    matplotlib.rcParams['font.family']='SimHei'#方便中文能够显示出来
    matplotlib.rcParams['font.sans-serif']=['SimHei']
    labels=np.array(['第一次作业','第二次作业','第三次作业','第四次作业','第五次作业','第六次作业'])#标签名
    nAttr=6#雷达图中六边形边数
    data = np.array([5,10,9,10,10,7])#雷达图中标签的数据值
    angles = np.linspace(0,2*np.pi,nAttr,endpoint=False)#一哥标签点到另一个标签点画笔所需旋转的角度值,取决于nAttr的大小
    data = np.concatenate((data,[data[0]]))
    angles = np.concatenate((angles,[angles[0]]))
    fig = plt.figure(facecolor="white" )
    plt.subplot(111,polar=True)
    plt.plot(angles,data,'bo-',color='g',linewidth=2)#画出雷达图中不规则的六边形
    plt.fill(angles,data,facecolor='g',alpha=0.25)#填充半透明颜色,即不规则的六边形颜色
    plt.thetagrids(angles*180/np.pi,labels)#为雷达图设置标签,就是labels里的文字
    plt.figtext(0.52,0.95,'em对的——成绩表',ha='center')#命名雷达图的名字
    plt.grid(True)
    plt.savefig('作业成绩雷达图.JPG')#保存雷达图的图片
    plt.show()

    效果如下图所示

    四、手绘图效果

    from PIL import Image
    import numpy as np
    vec_el = np.pi/3.3# 光源的俯视角度,弧度值
    vec_az = np.pi/9#光源的方位角度,弧度值
    depth = 5#(0-100)值越大,整体画面灰度值较深,有近似浮雕的效果;值越小,背景区域接近白色
    im = Image.open('Wade.png').convert('L')
    a = np.asarray(im).astype('float')
    grad = np.gradient(a)#取图像灰度的梯度值
    grad_x,grad_y = grad#分别取横纵图像梯度值
    grad_x = grad_x+depth/100.
    gred_y = grad_y+depth/100.
    dx = np.cos(vec_el)*np.cos(vec_az)#光源对x轴的影响
    dy = np.cos(vec_el)*np.cos(vec_az)#光源对y轴的影响
    dz = np.sin(vec_el)               #光源对z轴的影响
    A = np.sqrt(grad_x**2+grad_y**2+1.)
    uni_x = grad_x/A
    uni_y = grad_y/A
    uni_z = 1./A
    a2 = 255*(dx*uni_x+dy*uni_y+dz*uni_z)#光源归一化
    a2 = a2.clip(0,255)#预防溢出0~255这个区间
    im2 = Image.fromarray(a2.astype('uint8'))#重构图像
    im2.save('Wade6.png')

    原图如下

    运行程序后,如下

    以及各种效果如下:

  • 相关阅读:
    VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)
    VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)
    VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)
    Getmemory问题
    计算后缀表达式
    0-1背包问题
    不抛异常的swap函数
    输出n*n矩阵
    字符串全排列输出
    判断主机字节
  • 原文地址:https://www.cnblogs.com/asd516970982/p/10748434.html
Copyright © 2011-2022 走看看