zoukankan      html  css  js  c++  java
  • 科学计算库报告

    (一)Numpy+Matplotlib学习笔记
    1、Numpy基础
    数组

    1.Numpy中的数组是ndarray 类实例化的对象。

    其中包括:

    实际的数据:数组的内容
    元数据:对数组的描述(保存数组的长度,数组的…)
    大部分对数组的操作仅仅是对元数据的操作,以此提高执行性能

    Numpy中的数组必须是同质的,也就是所有的数据类型必须相同

    通过基0的下标访问数组中的元素

    dtype和shape的属性分别表示元素的类型和维度

    实例化

    c=np.arange(起始值,终止值,步长):只能用于整数序列

    c.arange(起始值,终止值,步长).reshape(2 ,3, 4)

    c.ravel()
    c.flastten() :赋值一份:
    np.array(任何可以被解释为数组的序列

    类型类型)

    np.astype(目标类型) - > 转换为映射的内存的数据类型
    2.数组的维度

    数组的维度表示为一个元组,其中的元素按照从高纬度到低纬度的顺序排列
    一维数组:一位数组中有6个元素:(6,)
    二维数组:两行3列:(2,3)
    三维数组:两页三行四列:(2,3,4)
    a.ndim : 返回数组的维度长度数值,一维二维还是三维
    a.shape : 返回元组表示数组各个维度的长度[[1,2,3],[4,5,6]]-->(2,3)
    3.数据类型

    内置类型

    bool_:True/False
    整形:int8/int16/int32/int64,uint8/uint16/uint32/uint64
    浮点型:float16/float32/float64
    复数:complex64/complex128
    字符串:str_
    复合类型

    由多个相同或不同的字段组合而成的类型

    np.array(...,dtype=字符类型)

    '''
    类型字符码
    boll_:?
    有符号整型:i1/2/4/8
    无符号整型:u1/2/4/8
    浮点:f2/4/8
    复数:c8/16

    c = np.array( [ ('abc',[3,4,5]),('qwe',[1,2,3]) ] ,
    dtype={'names':['fa','fb'],'formats':['U3','3i4']})
    # dtype类型描述一个字典,names表示取值时的名称。formats表示数据类型
    print(b[0]['fa'])
    print(b[0]['fb'])
    #--------------------------------------------------
    d = np.array( [ ('abc',[3,4,5]),('qwe',[1,2,3]) ] ,
    dtype={'fa':('U3',0),'fb':('3i4',16)})
    # 字典 {名称:(数据类型,指针地址起始位置)}
    print(d.itemsize)

    切片

    数组[start:end:步长,start:end:步长,start:end:步长...]

    用法和正常Python切片相同

    默认起始:首元素(正步长)/尾(负的步长)

    默认终止:尾后/首前

    # 普通用法
    a = np.arange(1,10)
    print(a[:3]) #[1,2,3]

    b = np.arange(1,25).reshape(2,3,4)
    print(b[:,0,0])
    print(b[0,:,:])
    print(b[0,...]) # ...表示连续出现的冒号

    水平拆分
    np.hsplit(被拆数组,拆分份数)
    np.split(被拆数组,拆分份数,axis=0)
    垂直拆分
    np.dsplit(被拆分数组,拆分份数)
    ndarray的属性

    dtype - 元素的数据属性

    shape - 数组的维度

    ndim - 数组的维数(len(shape))

    size - 数组的元素数,shape中元素相乘

    itemsize - 元素的字节数

    变维

    数组.reshape(新维度),返回数组
    就地变维:修改元数据的维度信息,不产生新的数组
    数组.shaoe = 新维度
    数组.resize(新维度)
    2、Matplotlib基础
    基本绘图

    plot(x,y)

    线形、线宽、颜色

    plot(..., linestyle = 线形,linewidth=线宽,color=颜色,...)

    设置坐标范围

    xlim:(水平坐标的最小值,水平坐标的最大值)

    ylim:(垂直坐标的最小值,垂直坐标的最大值)

    设置坐标刻度

    xticks(水平轴的刻度位置[,水平轴刻度文本])
    yticks(垂直轴的刻度位置[,垂直轴刻度文本])

    设置坐标轴的属性

    ax = gca() - 获取当前的坐标轴图
    ax.splines[‘left’] - 左纵轴
    ax.splines[‘right’] - 右纵轴
    ax.splines[‘top’] - 上横轴
    ax.splines[‘bottom’] - 下横轴
    xx = 任意轴
    xx.set_position((坐标系,位置值)) #设置位置
    xx.set_color(颜色) # 设置颜色

    图形窗口对象

    digure(窗口名,figszize=大小,dpi分辨率,dececolor=颜色)

    title(窗口标题,fontsize=字体大小)
    xlabel(窗口标题,fontsize=字体大小)
    ylabel(窗口标题,fontsize=字体大小)

    mp.xticks(()) # 去掉刻度值
    mp.yticks(()) # 去掉刻度值
    mp.text(0.5,0.5,'1',ha ='center',va='center', size=36,alpha=0.5)

    mp.subplot(gs[0,:2])
    mp.xticks(()) # 去掉刻度值
    mp.yticks(()) # 去掉刻度值

    mp.show()

    生成条形图

    bar(水平坐标,绝对高度,相对高度,color=颜色,label=图例标签,alpha=透明度)

    饼图

    pie(值的数组,间隙数组,标签数组,颜色数组,格式,shadow=是否带阴影,startangle=起始角度)

    # 生成矩阵
    x,y = np.meshgrid(np.linspace(-3,3,n),np.linspace(-3,3,n)) # 1000宽高的矩阵
    # 利用函数生成个图
    z1 = np.exp(-x**2 - y**2)
    z2 = np.exp(-(x - 1)**2 - (y - 1)**2)
    z = (z1 - z2) * 2

    #创建图形窗口
    mp.figure('Contour',facecolor='lightgray')
    mp.gca(projection='polar') # 创建极坐标系

    # 设置窗口的标题
    mp.title('Contour',fontsize=20)
    mp.xlabel(r'$ heta$',fontsize=14)
    mp.ylabel(r'$ ho$',fontsize=14)
    mp.grid(linestylr=":")

    创健三维坐标系

    from mpl_toolkits.mplot3d import axes3d

    ax = mp.gca(projection='3d') # 变/创建三维坐标系

    三维散点

    ax.scatter(x,y,z,s=大小.marker=色彩,edgecolor=边缘色,facecolor=填充色,zorder=z顺序)

    空间曲面

    ax.plot_surface(x坐标矩阵,y坐标矩阵,z坐标矩阵,rstride=行跨距,cstride=列跨距,cmap=颜色映射)
    ax.plot_wireframe(x坐标矩阵,y坐标矩阵,z坐标矩阵,rstride=行跨距,linewidth=线宽.color=颜色)
    动画

    通过连续显示的静态画面生成动画效果

    import matplotlib.animation as ma

    ma.FubcAnimation(图形窗口,更新函数,interval=间隔)

    def fun(...)

    (2)python作业成绩的雷达图

    每次作业成绩总分:作业2(100),作业3(100),作业3(100),作业4(100),  作业5(100),作业6(70)

    本人成绩:作业2(100),作业3(87.5),作业3(100),作业4(100),  作业5(100),作业6(70)

    实现画图的代码为如下:

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib
    matplotlib.rcParams['font.family']='SimHei'
    matplotlib.rcParams['font.sans-serif']=['SimHei']
    radar_labels = np.array(['作业2','作业3','作业4','作业5','作业6'])
    #数据个数
    dataLenth = 5
    #数据
    data = np.array([100,87.5,100,110,70])

    angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False)
    data=np.concatenate((data,[data[0]]))
    angles = np.concatenate((angles, [angles[0]]))
    fig = plt.figure(facecolor='white')
    ax = plt.subplot(111, polar=True)
    plt.plot(angles, data, 'bo-',color='b', linewidth=2,alpha=0.4)
    plt.plot(angles, data, 'o-',linewidth=1.5,alpha=0.4)
    plt.fill(angles,data,facecolor='b',alpha=0.25)
    plt.thetagrids(angles * 180/np.pi,radar_labels)
    plt.figtext(0.52,0.95,"02豆芽成绩表", ha='center')
    plt.grid(True)
    plt.show()

    执行结果看下图:

    (3)pythton自定义手绘风

    选取进行手绘的原图

    代码如下:

    
    

    from PIL import Image
    import numpy as np
    vec_el = np.pi/2.2 # 光源的俯视角度,弧度值
    vec_az = np.pi/4. # 光源的方位角度,弧度值
    depth = 10. # (0-100)
    a =Image.open("shang.png").convert('L')
    a=np.asarray(a).astype('float')
    grad = np.gradient(a) #取图像灰度的梯度值
    grad_x, grad_y =grad #分别取横纵图像梯度值
    grad_x = grad_x*depth/100.
    grad_y = grad_y*depth/100.
    dx = np.cos(vec_el)*np.cos(vec_az) #光源对x 轴的影响
    dy = np.cos(vec_el)*np.sin(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

    
    

    b = 255*(dx*uni_x + dy*uni_y + dz*uni_z) #光源归一化
    b = b.clip(0,255)
    im = Image.fromarray(b.astype('uint8')) #重构图像
    im.show("shang.jpg")

     

    执行效果如下:

    (4)python画数学或物理规律

    我想用pythton画三角函数

    代码look:

    import  numpy as np
    import matplotlib.pyplot as plt
     
    x = np.linspace(-10, 10, 1000)
    a = np.sin(x)
    b = np.cos(x)
    c = np.tan(x)
    # d = np.log(x)
     
    plt.figure(figsize=(8,4))
    plt.plot(x,a,label='$sin(x)$',color='green',linewidth=0.5)
    plt.plot(x,b,label='$cos(x)$',color='red',linewidth=0.5)
    plt.plot(x,c,label='$tan(x)$',color='blue',linewidth=0.5)
    # plt.plot(x,d,label='$log(x)$',color='grey',linewidth=0.5)
     
    plt.xlabel('Time(s)')
    plt.ylabel('Volt')
    plt.title('PyPlot')
    plt.xlim(0,10)
    plt.ylim(-5,5)
    plt.legend()
    plt.show()

    执行效果看下图:

  • 相关阅读:
    JS事件冒泡
    iis设置Gzip后,无后缀的url无法压缩解决 MVC iis GZIP
    SQL中的循环、for循环、游标
    采用CDN加速后,如何在程序里获取用户IP地址
    Resharper 的快捷键
    JS防后退跳转
    ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
    Log4net创建日志及简单扩展
    统治世界的十大算法
    ffmpeg save rtsp stream
  • 原文地址:https://www.cnblogs.com/2987831760qq-com/p/10739642.html
Copyright © 2011-2022 走看看