zoukankan      html  css  js  c++  java
  • Pathon中numpy模块

    numpy模块

    numpy官方文档:[https://docs.scipy.org/doc/numpy/reference/?v=20190307135750]

    import numpy as np
    
    arr = np.array([1,2,3])
    print(arr, type(arr))
    
    
    [1 2 3] <class 'numpy.ndarray'>
    
    # 创建二维ndarray对象
    print(np.array([[1,2,3,4],[5,6,7]]))  # 数据不齐显示两个列表
    
    [list([1, 2, 3, 4]) list([5, 6, 7])]
    
    print(np.array([[1,2,3,4],[5,6,7,8]]))
    
    [[1 2 3 4]
     [5 6 7 8]]
    
    # 创建三维的ndarray对象  # 多层二维数组嵌套
    print(np.array([[[1,2,3,4],[5,6,7,8]],
                    
                    [[1,2,3,4],[5,6,7,8]],
                    
                   [[1,2,3,4],[5,6,7,8]]]))
    
    [[[1 2 3 4]
      [5 6 7 8]]
    
     [[1 2 3 4]
      [5 6 7 8]]
    
     [[1 2 3 4]
      [5 6 7 8]]]
    
    arr = np.array([[1,2,3],[4,5,6]])
    print(arr)
    
    [[1 2 3]
     [4 5 6]]
    
    # 获取矩阵的行和列结构,返回元组
    print(arr.shape)
    
    (2, 3)
    
    print(arr.shape[0],arr.shape[1])
    
    2 3
    

    切割矩阵

    • 切分矩阵类似于列表的切割,矩阵的切割涉及到行和列,但是两者切割方式都是从0开始,左闭右开的区间
    arr = np.array([[1,2,3,4,5],[5,6,7,8,9],[10,11,12,13,14]])
    print(arr)
    
    [[ 1  2  3  4  5]
     [ 5  6  7  8  9]
     [10 11 12 13 14]]
    
    # 取所有元素
    print(arr[:,:])
    
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    
    # 取一行所有元素
    print(arr[:1,:])
    
    [[1 2 3 4]]
    
    # 取一列所有元素
    print(arr[:,:1])
    
    [[1]
     [5]
     [9]]
    
    print(arr[(0,1,2),0]) # numpy0是列
    
    [1 5 9]
    
    # 取大于5的元素,返回一个数组
    print(arr[arr>5])
    
    [ 6  7  8  9 10 11 12 13 14]
    

    矩阵元素替换

    • 矩阵元素替换类似于列表元素替换,如果对矩阵进行替换操作,会修改原矩阵的元素
    arr = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    print(arr)
    
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    
    # 取一行的所有元素,并让第一行的元素都为0
    arr1 = arr.copy()
    arr1[:1,:] = 0
    print(arr1)
    
    [[ 0  0  0  0]
     [ 5  6  7  8]
     [ 9 10 11 12]]
    
    # 取所有大于5的元素,并让大于5的元素为0
    arr2 = arr.copy()
    arr2[arr > 5] = 0
    print(arr2)
    
    [[1 2 3 4]
     [5 0 0 0]
     [0 0 0 0]]
    
    # 对矩阵请零
    arr3 = arr.copy()
    arr3[:,:] = 0
    print(arr3)
    
    [[0 0 0 0]
     [0 0 0 0]
     [0 0 0 0]]
    

    矩阵的合并

    arr1 = np.array([[1,33,2],[3,53,4],[5,32,46]])
    print(arr1)
    
    
    [[ 1 33  2]
     [ 3 53  4]
     [ 5 32 46]]
    
    arr2 = np.array([[7,8],[23,4],[3,3]])
    print(arr2)
    
    [[ 7  8]
     [23  4]
     [ 3  3]]
    

    合并两个矩阵的行,注意使用hstack()方法合并矩阵,矩阵应该有相同的行,其中hstack的h表示horzzontal水平的

    # 合并两个矩阵的行,注意使用hstack()方法合并矩阵,矩阵应该有相同的行,其中hstack的h表示horzzontal水平的
    print(np.hstack((arr1, arr2)))
    
    [[ 1 33  2  7  8]
     [ 3 53  4 23  4]
     [ 5 32 46  3  3]]
    

    合并两个矩阵,其中axis=1表示合并两个矩阵的行

    print(np.concatenate((arr1,arr2),axis = 1))
    
    [[ 1 33  2  7  8]
     [ 3 53  4 23  4]
     [ 5 32 46  3  3]]
    
    # 合并两个矩阵的列,注意使用vstack()方法合并矩阵,矩阵应该会有相同的列,其中vstack的v表示vertical垂直的
    # 合并两个矩阵,其中axis= 0表示合并两个矩阵的列
    arr3 = np.array([[1,33,2],[3,53,4]])
    print(arr3)
    print('*'*20)
    arr4 = np.array([[1,33,2],[5,32,46]])
    print(arr4)
    print('*'*20)
    print(np.vstack((arr3, arr4)))
    # print(np.concatenate((arr3,arr4),axis = 0))
    
    [[ 1 33  2]
     [ 3 53  4]]
    ********************
    [[ 1 33  2]
     [ 5 32 46]]
    ********************
    [[ 1 33  2]
     [ 3 53  4]
     [ 1 33  2]
     [ 5 32 46]]
    

    通过函数创建矩阵

    # arange
    # arange 构造0-9的ndarray数组
    print(np.arange(10))
    
    [0 1 2 3 4 5 6 7 8 9]
    
    # 构造1-20步长为3 的ndarray数组
    print(np.arange(1,20,3))
    
    [ 1  4  7 10 13 16 19]
    
    # linspace/logspace
    # 构造一个等差数列,取头也取尾,从0-20取5个数
    print(np.arange(0,20,5))
    
    [ 0  5 10 15]
    
    # 构造一个等比数列,从10**0 到10**20, 取五个数
    print(np.logspace(0,20,5))
    
    [1.e+00 1.e+05 1.e+10 1.e+15 1.e+20]
    
    # zeros/ ones/eye/empty
    # 构造3*4的全0矩阵
    print(np.zeros((3,4)))
    
    [[0. 0. 0. 0.]
     [0. 0. 0. 0.]
     [0. 0. 0. 0.]]
    
    # 构造3*4 的全1矩阵
    print(np.ones((3,4)))
    
    [[1. 1. 1. 1.]
     [1. 1. 1. 1.]
     [1. 1. 1. 1.]]
    
    # 构造3个主元的单位矩阵
    print(np.eye(3))
    
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
    
    # 构造一个4*4的随机矩阵,里面的元素全是随机生成的
    print(np.empty(4*4))
    
    [2.22838829e-312 0.00000000e+000 3.62633684e+228 1.83077623e+280
     9.00090667e+223 2.54452700e+179 7.24618769e-154 2.13941344e-105
     2.71084864e-074 4.15107308e+223 3.74567055e+233 3.10275055e-115
     4.25114573e-096 9.78750380e+199 6.97843734e+252 2.65690549e-312]
    

    fromstring/fromfunctions

    • formstring是通过对字符串的字符码所对应的ASCII编码的位置,生成一个ndarray对象
      s = 'abcdef'
      np.int8表示一个字符的字节数为8
    s = 'abcdef'
    print(np.fromstring(s, dtype=np.int8))
    
    [ 97  98  99 100 101 102]
    
    
    e:python3.7libsite-packagesipykernel_launcher.py:2: DeprecationWarning: The binary mode of fromstring is deprecated, as it behaves surprisingly on unicode inputs. Use frombuffer instead
    

    def func(i,j):
        '''其中i为矩阵的行,j为矩阵的列'''
        return i*j
    
    # 使用函数对矩阵元素的行和列的索引做处理,得到当前元素的值,索引从0开始,并构造一个3*4的矩阵
    print(np.fromfunction(func,(3,4)))
    
    [[0. 0. 0. 0.]
     [0. 1. 2. 3.]
     [0. 2. 4. 6.]]
    

    矩阵的运算

    运算符 说明

    • + 两个矩阵对应元素相加
    • - 两个矩阵对应元素相减
    • 两个矩阵对应元素相乘
    • / 两个矩阵对应元素相除,如果都是整数则取商
    • % 两个矩阵对应元素相除后取余数
    • **n单个矩阵每个元素都取 次方,如**2:每个元素都取平方
    arrarr1 = np.array([[1,2],[3,4],[5,6]])
    print(arr1)
    
    [[ 1 33  2]
     [ 3 53  4]
     [ 5 32 46]]
    
    srr2 = np.array([[7,8],[11,12],[32,1]])
    print(arr2)
    
    [[ 7  8]
     [23  4]
     [ 3  3]]
    
    print(arrarr1+srr2)
    
    [[ 8 10]
     [14 16]
     [37  7]]
    
    print(arrarr1 ** 2)
    
    [[ 1  4]
     [ 9 16]
     [25 36]]
    

    常用矩阵运函数

    • 矩阵函数 详解
    • np.sin(arr) 对矩阵arr中每个元素取正弦,sin(x)
    • np.cos(arr) 对矩阵arr中每个元素取余弦,cos(x)
    • np.tan(arr) 对矩阵arr中每个元素取正切,tan(x)
    • np.arcsin(arr) 对矩阵arr中每个元素取反正弦,arcsin(x)
    • np.arccos(arr) 对矩阵arr中每个元素取反余弦,arccos(x)
    • np.arctan(arr) 对矩阵arr中每个元素取反正切,arctan(x)
    • np.exp(arr) 对矩阵arr中每个元素取指数函数,ex
    • np.sqrt(arr) 对矩阵arr中每个元素开根号√-x
    arr = np.array([[1,2,3,4],[5,6,7,8],[9,11,12,18]])
    print(arr)
    
    [[ 1  2  3  4]
     [ 5  6  7  8]
     [ 9 11 12 18]]
    
    # 对矩阵的所有元素去正弦
    
    print(np.sin(arr))
    
    [[ 0.84147098  0.90929743  0.14112001 -0.7568025 ]
     [-0.95892427 -0.2794155   0.6569866   0.98935825]
     [ 0.41211849 -0.99999021 -0.53657292 -0.75098725]]
    
    # 对矩阵的所有元素开根号
    print(np.sin(arr))
    
    [[ 0.84147098  0.90929743  0.14112001 -0.7568025 ]
     [-0.95892427 -0.2794155   0.6569866   0.98935825]
     [ 0.41211849 -0.99999021 -0.53657292 -0.75098725]]
    
    # 对矩阵的所有元素取反弦,如果元素不在定义域内,则会取nan值
    print(np.arcsin(arr))
    
    [[1.57079633        nan        nan        nan]
     [       nan        nan        nan        nan]
     [       nan        nan        nan        nan]]
    
    
    e:python3.7libsite-packagesipykernel_launcher.py:2: RuntimeWarning: invalid value encountered in arcsin
    

    矩阵的点乘

    • 矩阵的点乘必须满足第一个矩阵的列数等于第二个矩阵的行数
    arr1 = np.array([[1,2,3],[4,5,6]])
    print(arr.shape)
    
    (3, 4)
    
    arr5 = np.array([[7,8],[9,10],[11,12]])
    print(arr5.shape)
    
    (3, 2)
    
    assert arr1.shape[0] == arr2.shape[1]
    print(arr1.dot(arr2))
    
    [[ 58 181]
     [139 388]]
    
    # 矩阵的转置
    arr = np.array([[1,2,3],[4,5,6]])
    print(arr)
    
    [[1 2 3]
     [4 5 6]]
    
    print(arr.T)
    
    array([[1, 4],
           [2, 5],
           [3, 6]])
    

    矩阵的逆

    • 矩阵的行和列相同时,矩阵才可逆
    arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(arr)
    
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    
    print(np.linalg.inv(arr))
    
    [[-4.50359963e+15  9.00719925e+15 -4.50359963e+15]
     [ 9.00719925e+15 -1.80143985e+16  9.00719925e+15]
     [-4.50359963e+15  9.00719925e+15 -4.50359963e+15]]
    
    # 单位矩阵的逆是单位矩阵本身
    arr = np.eye(3)
    print(arr)
    
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
    
    print(np.linalg.inv(arr))
    
    [[1. 0. 0.]
     [0. 1. 0.]
     [0. 0. 1.]]
    

    矩阵的其他操作

    • 最大最小值
    • 平均值
    • 标准差
    • 方差
    • 中位数
    • 矩阵求和
    • 累加和
    arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
    print(arr)
    
    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    
    # 获取最大值/最小值
    print(arr.max())
    print(arr.min())
    
    9
    1
    
    # 获取每一列的最大值
    print(arr.max(axis= 0))
    
    [7 8 9]
    
    # 获取每一行的最大值
    print(arr.max(axis = 1))
    
    [3 6 9]
    
    # 获取矩阵最大元素的索引位置
    print(arr.argmax(axis=1))
    
    [2 2 2]
    
    # 平均值
    print(arr.mean())
    
    5.0
    
    # 获取每一列的平均值   0 表示列
    # 获取每一行的票据纸   1 表示行
    print(arr.mean(axis=0))
    print(arr.mean(axis=1))
    
    [4. 5. 6.]
    [2. 5. 8.]
    
    # 获取所有元素的方差
    print(arr.var())
    
    6.666666666666667
    
    # 获取矩阵每一列元素的方差
    # 获取矩阵每一行元素的方差
    print(arr.var(axis=0))
    print(arr.var(axis=1))
    
    [6. 6. 6.]
    [0.66666667 0.66666667 0.66666667]
    
    # 获取所有元素的标准差
    # 获取每一列的标准差
    # 获取每一行的标准差
    print(arr.std())
    print(arr.std(axis=0))
    print(arr.std(axis=1))
    
    2.581988897471611
    [2.44948974 2.44948974 2.44948974]
    [0.81649658 0.81649658 0.81649658]
    
    # 中位数
    # 获取所有元素的中位数
    # 获取每一列的中位数
    # 获取每一行的中位数
    print(np.median(arr))
    print(np.median(arr,axis = 0))
    print(np.median(arr,axis = 1))
    
    
    5.0
    [4. 5. 6.]
    [2. 5. 8.]
    
    # 矩阵求和
    # 对矩阵每一个元素求和
    # 对矩阵每一列求和
    # 对矩阵每一行求和
    print(arr.sum())
    print(arr.sum(axis=0))
    print(arr.sum(axis=1))
    
    45
    [12 15 18]
    [ 6 15 24]
    

    numpy生成随机数

    函数名称 数功能 参数说明
    rand(d0,d1,⋯,dn) 产生[0,1)内的均匀分布的随机数 dn为第n维数据的维度
    randn(d0,d1,⋯,dn) 产生标准正态分布随机数 dn为第n维数据的维度
    randint(low[, high, size, dtype]) 产生随机整数 low:最小值;high:最大值;size:数据个数
    random_sample([size]) 在[0,1)内产生随机数 size为随机数的shape,可以为元祖或者列表
    choice(a[, size]) 从arr中随机选择指定数据 arr为1维数组;size为数据形状
    # RandomState()方法会让数据随机一次,之后都是相同的数据
    rs=np.random.RandomState(1)
    print(rs.rand(10))
    
    [4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01
     1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01
     3.96767474e-01 5.38816734e-01]
    
    # 构造3*4的均匀分布的矩阵
    # seed()方法会让数据随机一次,之后都是相同的数据
    np.random.seed(1)
    print(np.random.rand(3,4))
    
    [[4.17022005e-01 7.20324493e-01 1.14374817e-04 3.02332573e-01]
     [1.46755891e-01 9.23385948e-02 1.86260211e-01 3.45560727e-01]
     [3.96767474e-01 5.38816734e-01 4.19194514e-01 6.85219500e-01]]
  • 相关阅读:
    VysorPro助手
    Play 2D games on Pixel running Android Nougat (N7.1.2) with Daydream View VR headset
    Play 2D games on Nexus 6P running Android N7.1.1 with Daydream View VR headset
    Native SBS for Android
    ADB和Fastboot最新版的谷歌官方下载链接
    How do I install Daydream on my phone?
    Daydream Controller手柄数据的解析
    蓝牙BLE传输性能及延迟分析
    VR(虚拟现实)开发资源汇总
    Android(Java)控制GPIO的方法及耗时分析
  • 原文地址:https://www.cnblogs.com/Dr-wei/p/11012090.html
Copyright © 2011-2022 走看看