zoukankan      html  css  js  c++  java
  • 科学计算可视化

    一.python123成绩雷达图

    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(['作业1','作业2','作业3','作业4','作业5']) #标签

    nAttr=5

    data=np.array([19,16,18,19,8]) # 作业的数据

    angles=np.linspace(0,2*np.pi,nAttr,endpoint=False)

    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)

    plt.figtext(0.52,0.95,'潘巧妍的成绩表',ha='center')

    plt.grid(True)

    plt.savefig('panq,JPG')

    plt.show() 

    结果如图:

     

    二.numpy库读书笔记

    1.numpy库不用安装,树莓派Python v3默认安装已经包含了numpy。

    2.numpy:支持N维数组运算、处理大型矩阵(Matrix)、成熟的广播函数库、矢量运算、线性代数、傅里叶变换、随机数生成,并可与C++/Fortran语言无缝结合。

    3.常用的数组创建函数

    导入模块:import numpy as np

    (1)np.array([x,y,z],dtype=int):从python列表和元组创建数组(dtyoe为数据类型)

    >>> np.array([1, 2, 3, 4, 5]) # 把列表转换为数组

    array([1, 2, 3, 4, 5])

    (2)np.arrange(x,y,i):创建一个从x到y,以i为步长的数组

    >>> np.arange(1, 10, 2)

    array([1, 3, 5, 7, 9])

    (3)np.linspace(x,y,n):创建一个由x到y,等分成n个元素的数组

    >>> np.linspace(0, 10, 11) # 等差数组,包含11个数

    array([ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])

    (4)np.indices((m,n)):创建一个m行n列的矩阵

     

     

    (5)np.ones((m,n),dtype):创建一个m行n列全为1的数组,dtype是数据类型

    >>> np.ones((3,3)) # 全1二维数组

    array([[ 1., 1., 1.],

    [ 1., 1., 1.],

    [ 1., 1., 1.]])

    (6)np.empty((m,n),dtype):创建一个m行n列全为0的数组

    >>> np.empty((3,3)) # 空数组,只申请空间而不初始化,元素值是不确定的

    array([[ 0., 0., 0.],

    [ 0., 0., 0.],

    [ 0., 0., 0.]])

    (7)np.zeros((m,n),dtype): 创建一个m行n列全为0的数组

    np.zeros((3,3)) # 全0二维数组,3行3列

    [[ 0. 0. 0.]

    [ 0. 0. 0.]

    [ 0. 0. 0.]]

    (8)np.identity(n) :创建n行n列单位矩阵

    >>> np.identity(3) # 单位矩阵

    array([[ 1., 0., 0.],

    [ 0., 1., 0.],

    [ 0., 0., 1.]])

     

    4.实现数组转置

    (1)一维数组转置后还是一样的

    >>> a = np.array((1, 2, 3, 4))

    >>> a

    array([1, 2, 3, 4])

    >>> a.T # 一维数组转置以后和原来是一样的

    array([1, 2, 3, 4])

    (2)matrix()标准矩阵运算(一维数组可以实现转置)

    >>> a4=[1,2,3,4]

    >>> a5=np.matrix(a4)

    >>> a5

    matrix([[1, 2, 3, 4]])

    >>> a5.T

    matrix([[1],

    [2],

    [3],

    [4]])

    (2)正常情况下

    >>> b = np.array(([1, 2, 3], [4, 5, 6], [7, 8, 9]))

    >>> b

    array([[1, 2, 3],

    [4, 5, 6],

    [7, 8, 9]])

    >>> b.T # 转置

    array([[1, 4, 7],

    [2, 5, 8],

    [3, 6, 9]])

     

    三.matplotlib读书笔记

    1.matplotlib是提供数据绘图功能的第三分库,其子库pyplot主要用于实现各种数据展示图像的绘制。

    引用代码:

    import matplotlib.pyplot as plt

    import matplotlib

    matplotlib.rcParams['font.family']='SimHei' #为了正确显示中文字体,第3、4行代码是必须的

    matplotlib.rcParams['font.sans-serif']=['SimHei']

    以下将使用plt代替matplotlib.pyplot。

    2.plt库的绘图区域函数

    plt.figure(figsize=None,figcolor=None):创建一个全局绘图区域

    plt.axes(rect,axisbg='w'):创建一个坐标系风格的子绘图区域(rec=[left,bottom,width,height],axisbg指背景色)

    plt.subplot(nrows,ncols,plot_number):在全局绘图区域中创建一个子绘图区域

    (nrows为行,ncols为列,根据先行后列的计数方式在plot_number位置生成一个坐标系)

    plt.subplot(324):全局绘图区域被分割成3x2的网格,,其中在第四个位置绘制了一个坐标系

    plt.axes()默认创建一个subplot(111)坐标系

     

    四.自定义手绘图

    from PIL import Image

    import numpy as np

    a=np.asarray(Image.open(r'C:/Users/Asus/Desktop/媌.jpg').convert('L')).astype('float')

    depth=10

    grad=np.gradient(a)#取图像灰度的梯度值

    grad_x,grad_y=grad#分别取横纵图像梯度值

    grad_x=grad_x*depth/100

    grad_y=grad_y*depth/100

    A=np.sqrt(grad_x**2+grad_y**2+1)

    uni_x=grad_x/A

    uni_y=grad_y/A

    uni_z=1/A

    vec_el=np.pi/2.2#光源的俯视角度,弧度值

    vec_az=np.pi/4 #光源的方位角度,弧度值

    dx=np.cos(vec_el)*np.cos(vec_az)

    dy=np.cos(vec_el)*np.cos(vec_az)

    dz=np.sin(vec_el)

    b=255*(dx*uni_x+dy*uni_y+dz*uni_z)#光源归一化

    b=b.clip(0,255)

    im=Image.fromarray(b.astype('uint8'))#重构图像

    im.save(r'C:/Users/Asus/Desktop/panq.jpg')

    原图: 手绘效果:

  • 相关阅读:
    [luogu p2482] [SDOI2010]猪国杀
    [luogu p2296] 寻找道路
    左右布局(备用复制)
    导出Excel
    流式布局 及 媒体查询
    echarts设置(持续更新)
    解决Vue中watch首次进入路由不触发的问题
    Math.random
    Vue的拖拽
    使的dialog上下左右居中(弹框居中)
  • 原文地址:https://www.cnblogs.com/panqiaoyan/p/10750326.html
Copyright © 2011-2022 走看看