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()

    执行效果看下图:

  • 相关阅读:
    阿里P8架构师谈:阿里双11秒杀系统如何设计?
    秒杀系统设计的知识点
    秒杀系统架构优化思路
    秒杀系统解决方案
    Entity Framework Code First (七)空间数据类型 Spatial Data Types
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
  • 原文地址:https://www.cnblogs.com/2987831760qq-com/p/10739642.html
Copyright © 2011-2022 走看看