• 科学计算可可视化


    Numpy

    创建列表
    a = [1, 2, 3, 4,5,6,7]
    a[ : :-1]   # reversed a [7, 6, 5, 4, 3, 2, 1]
    将列表转换为数组
    b = np.array(a)  输出=>array([1, 2, 3, 4, 5])
     
    数组基本操作 universal functions(ufunc)
    b.sum(): #求和 10
    b.min(),b.max(): #最小最大值
    b[:6:2] = -10: # equivalent to a[0:6:2] = -10;   array([-10,2,-10,4,-10,6,-10])
    from start to position 6, exclusive, set every 2nd element to -10
    b.ravel(): # returns the array, flattened.拉伸成一行
    b.T: # returns the array, transposed转置
    a = np.floor(10*np.random.random((2,8))): #两行两列 随机 向下取整
    array([[1., 2., 6., 3., 6., 7., 5., 2.],
                  [2., 1., 9., 9., 1., 0., 0., 5.]])
    np.hsplit(a,2): # Split a into 2 均分拆成2个数组 
    [array([[1., 2., 6., 3.],[2., 1., 9., 9.]]), 
    array([[6., 7., 5., 2.],[1., 0., 0., 5.]])]
    np.hsplit(a,(3,4)): # Split a after the third and the fourth column 3 4 列开始切
    np.hsplit(a,(3,5)): # Split a after the third and the fifth column 切成3份
    np.hsplit(a,(3,4,5)): # Split a after the third ,forth, and fifth column 切成4份
    np.abs(x)、np.fabs(x): 计算数组各元素的绝对值
    np.sqrt(x): 计算数组各元素的平方根
    np.square(x): 计算数组各元素的平方
    np.log(x),np.log10(x),np.log2(x): 计算数组各元素的自然对数、10底对数和2底对数
    np.ceil(x): 计算数组各元素的ceiling值(向上)
    np.floor(x): 计算数组各元素的floor值(向下)
    np.rint(x) : 计算数组各元素的四舍五入值
    np.add(b,c): 数组b c相加
    np.exp(b): #b,c是数组 以自然常数e为底的指数函数,返回e的n次方,e 2.71828
    np.modf(x) : 将数组各元素的小数和整数部分以两个独立数组形式返回
    c=np.array([2.5,1.3,-4.7])=>(array([ 0.5,  0.3, -0.7]), array([ 2.,  1., -4.]))
    np.cos(x)、 np.cosh(x)、np.sin(x)、 np.sinh(x)、np.tan(x) 、np.tanh(x) : 计算数组各元素的普通型和双曲型三角函数
    np.sign(x) : 计算数组各元素的符号值,1(正数), 0, -1(负数)
    np.ones([10, 10]): 创建10行10列的数值为浮点1的矩阵
    np.zeros([10, 10]): 创建10行10列的数值为浮点0的矩阵
     
    Array Creation:
    arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, 
    linspace, logspace, mgrid, ogrid, ones, ones_like, r, zeros, zeros_like
    Numpy查看数组属性
    数组元素个数 b.size 输出=>5
    数组形状 b.shape(行,列数)  输出=>(5,)
    数组维度(维数) b.ndim  输出=>1
    数组元素类型 b.dtype  输出=>dtype('int64')
    itemsize: b.itemsize 输出=>8(type /8)
     
    array(深拷贝Deep Copy)
    d = a.copy()
    asarray(浅拷贝Shallow Copy)
    c = a.view()
     
    Numpy创建随机数组np.random 均匀分布
    np.random.rand(10, 10)创建指定形状(示例为10行10列)的数组(范围在0至1之间)
    np.random.uniform(0, 100)创建指定范围内的一个数  50.502704296553915
    np.random.randint(0, 100) 创建指定范围内的一个整数 25
     
    正态分布 给定均值/标准差/维度的正态分布np.random.normal(1.75, 0.1, (2, 3))
        array([[1.69776327, 1.77925925, 1.64313181, 1.58202955, 1.75463511],
           [1.82200004, 1.6600281 , 1.71285888, 1.73226195, 1.88572285],
           [1.74169649, 1.7785425 , 1.6278489 , 1.67284158, 1.71138916],
           [1.69907805, 1.73646882, 1.71581448, 1.82025122, 2.0067373 ]])
     
    改变数组形状(要求前后元素个数匹配),须得整除
      a1=np.ones([10]) 输出=>array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
      a2=a1.reshape([2,5])(变成2行5列)
       输出=>array([[1., 1., 1., 1., 1.],
           [1., 1., 1., 1., 1.]])
      a2=a1.reshape([3,])(变成3行,列未指定或为-1,由行计算出,此例不能被整除,报错)
    Traceback (most recent call last):
      File "", line 1, in
    ValueError: cannot reshape array of size 10 into shape (3,)
     
    a1.resize([2,5]): a1直接变为2行5列
     
    Manipulations:
    array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, 
    ndarray.item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, 
    transpose, vsplit, vstack
     
    条件运算
    stus_score = np.array([[80, 88], [82, 81], [84, 75], [86, 83], [75, 81]])
    stus_score > 80#符合为true,否则为false
    np.where(stus_score < 80, 0, 90)#符合为0,否则90 三目运算符
     
    统计运算
     指定轴最大值amax(参数1: 数组; 参数2: axis=0/1; 0表示列1表示行):
      np.amax(stus_score, axis=0)  =>array([86, 88])
     指定轴最小值amin:
      np.amin(stus_score, axis=0)  =>array([75, 75])
     指定轴平均值mean:
      np.mean(stus_score, axis=1)  =>array([84. , 81.5, 79.5, 84.5, 78. ])
     方差std:
      np.std(stus_score, axis=0)  =>array([3.77359245, 4.1761226 ])
     
    数组与数的运算
        # 为所有第一列都加5分
        stus_score[:, 0] = stus_score[:, 0]+5
        # 第一列减半
        stus_score[:, 0] = stus_score[:, 0]*0.5
     
    数组间也支持加减乘除运算,但基本用不到
     a = np.array([1, 2, 3, 4])
     b = np.array([10, 20, 30, 40])
     c = a + b
     d = a - b
     e = a * b #elementwise product
     f = a / b
     b**2(b的每项平方)
     10*np.sin(a)
     b = np.linspace(0,pi,3)#从0到pi,均分,3个数
     
    矩阵运算np.dot()
      (M行, N列) * (N行, Z列) = (M行, Z列)matrix product
    q = np.array([[0.4], [0.6]])
    result = np.dot(stus_score, q)
     
    矩阵拼接Vector Stacking
    x = np.arange(0,10,2)                     # x=([0,2,4,6,8])
    y = np.arange(5)                          # y=([0,1,2,3,4])
      矩阵垂直拼接列数(列数须得相等,否则报错)
    m = np.vstack([x,y])                      # m=([[0,2,4,6,8],
      #     [0,1,2,3,4]])
      矩阵水平拼接:(行数须得相等,否则报错)
    xy = np.hstack([x,y])                     # xy =([0,2,4,6,8,0,1,2,3,4])
    Numpy读取数据np.genfromtxt
    csv文件以逗号分隔数据
    构建csv文件,输入4行7列的内容,以逗号分隔
    re=np.genfromtxt("a.csv",delimiter=",")
    re
    array([[ 1. ,  2. ,  3. ,  6. ,  4. ,  5. ,  6. ],
           [ 2. ,  6. ,  3. ,  6. ,  3. ,  6. ,  3. ],
           [ 3. , 66.3, 33.3, 33. ,  3.3,  6. ,  6.9],
           [ 4. ,  2. ,  3. ,  5. ,  3.3,  6.5,  9. ]])
    如果数值据有无法识别的值出现,会以nan显示,nan相当于np.nan,为float类型(输入的是s):
    array([[ 1. ,  nan,  3. ,  6. ,  4. ,  5. ,  6. ],
           [ 2. ,  6. ,  3. ,  6. ,  3. ,  6. ,  3. ],
           [ 3. , 66.3, 33.3, 33. ,  3.3,  6. ,  6.9],
           [ 4. ,  2. ,  3. ,  5. ,  3.3,  6.5,  9. ]])
     

    Matplotlib

    Matplotlib是Python下著名的绘图库,它提供了一整套和Matlab相似的API,十分适合交互式绘图。它的官方网站上的文档相当完备,并且 Gallery页面(matplotlib.org/gallery.html)中有上百幅缩略图,打开之后都有源程序。因此如果需要绘制某种类型的图,只需要在这个页面中浏览、复制、粘贴一下,基本上都能满足日常需要。
    为了方便快速绘图,Matplotlib通过pyplot模块提供了一套和Matlab类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。只需要调用pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细节。Matplotlib库导入pyplot模块方法如下,示例代码:

    from matplotlib import pyplot as plt
    

    通过以上代码,我们将pyplot模块重命名为plt,也可以如下形式导入,示例代码:

    import matplotlib.pyplot as plt

    绘图是将数据集可视化的过程,本节利用pyplot模块在同一个图形中绘制余弦和正弦函数,我们将从默认设置开始,逐步充实图形,使其变得更好。
    首先,获取正弦和余弦数据,示例代码:

    import numpy as np
    X = np.linspace(-np.pi, np.pi, 256, endpoint=True)      #endpoint参数表示是否包含终结值
    C, S = np.cos(X), np.sin(X)
    

    X现在是一个numpy数组,有256个值,范围从-π到+π(包括),C是余弦(256个值),S是正弦(256个值)。然后通过使用pyplot模块里的plot()函数,使用默认设置绘图,示例代码:

    plt.plot(X, C)
    plt.plot(X, S)
    plt.show()
    

    运行结果:

     
    正弦和余弦曲线

    matplotlib的使用 由各种可视化类构成,内部结构复杂,受matlab库启发,matplotlab.pyplot是绘制种类可视化图形的命令子库,相当于快捷方式
    import matplotlib.pyplot as plt

    成绩雷达图

  • 相关阅读:
    wrap添加及去除外层dom的方法
    闭包作用域探究小例
    测试模型之W模型(脑图)
    软件测试模型之前置模型(脑图)
    软件测试模型之H模型(脑图)
    软件测试基础(脑图)
    测试模型之V模型(脑图)
    一个点型的rsyncd.conf内容
    rsync同步时报name lookup failed for name or service not known错误的解决方法
    ubuntu下的eclipse 3.3初用aptana报SWT错误
  • 原文地址:https://www.cnblogs.com/hy120040/p/10765014.html
Copyright © 2020-2023  润新知