NumPy(矩阵运算)

一、基本运算

  1. 基础加法、减、乘
    1
    2
    3
    4
    5
    6
    import numpy as np
    a=np.array([10,20,30,40]) # array([10, 20, 30, 40])
    b=np.arange(4) # array([0, 1, 2, 3])
    c=a+b # array([10, 21, 32, 43])
    c=a-b # array([10, 19, 28, 37])
    c=a*b # array([ 0, 20, 60, 120])
  • 矩阵的乘法,针对的是第一个矩阵的行与第二个矩阵的列
  • umpy中,想要求出矩阵中各个元素的乘方需要依赖双星符号 **,以二次方举例
    1
    c=b**2  # array([0, 1, 4, 9])
  1. 逻辑判断
  • 在脚本中对print函数进行一些修改可以进行逻辑判断:
    1
    2
    print(b<3)  
    # array([ True, True, True, False], dtype=bool)

二、矩阵操作函数

  1. 矩阵乘积
  • NumPy 的 dot 函数和matmul函数
  • 二维矩阵下dot 和 matmul 函数的结果是相同的
    1
    2
    c = np.dot (a, b)
    c = np.matmul(a, b)
  1. 展开矩阵
  • flatten 将多维的矩阵进行展开成1行的数列
  • lat是一个迭代器,本身是一个object属性。
    1
    2
    3
    4
    5
    6
    7
    8
    print(A.flatten())
    # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
    for item in A.flat:
    print(item)
    # 3
    # 4
    ……
    # 14
  1. 对矩阵的值进行操作
  • 最大最小,总值

    1
    2
    3
    np.sum(A)   # 4.4043622002745959
    np.min(A) # 0.23651223533671784
    np.max(A) # 0.90438450240606416

  • 求均值的几种方法

    1
    2
    np.average(A)  
    np.mean(A) 或 A.mean()

  • 求解中位数

    1
    A.median()

  • Cumsum累加 在cumsum()函数中:生成的每一项矩阵元素均是从原矩阵首项累加到对应项的元素之和。比如元素9,在cumsum()生成的矩阵中序号为3,即原矩阵中2,3,4三个元素的和。

    1
    np.cumsum(A)  # 累加

  • diff累差 该函数计算的便是每一行中后一项与前一项之差。故一个3行4列矩阵通过函数计算得到的矩阵便是3行3列的矩阵。

    1
    np.diff(A)  # 累差

  • nonzero()函数 官方:numpy函数返回非零元素的目录。 返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值。 可以通过a[nonzero(a)]来获得所有非零值。 个人:nonzero(a) 将对矩阵a的所有非零元素, 将其分为两个维度, 返回其在各维度上的目录值。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    如果 a=mat([ [1,0,0],                          
    [0,0,0],
    [0,0,0]])
    则 nonzero(a) 返回值为 (array([0]), array([0])) , 因为矩阵a只有一个非零值, 在第0行, 第0列。

    如果 a=mat([ [1,0,0],
    [1,0,0],
    [0,0,0]])
    则 nonzero(a) 返回值为 (array([0, 1]), array([0, 0])) , 因为矩阵a只有两个非零值, 在第0行、第0列,和第1行、第0列。所以结果元组中,第一个行维度数据为(0,1) 元组第二个列维度都为(0,0)。

  • sort排序函数 对所有元素进行仿照列表一样的排序操作,但仅针对每一行进行从小到大排序操作:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import numpy as np
    A = np.arange(14,2, -1).reshape((3,4))

    # array([[14, 13, 12, 11],
    # [10, 9, 8, 7],
    # [ 6, 5, 4, 3]])

    print(np.sort(A))

    # array([[11,12,13,14]
    # [ 7, 8, 9,10]
    # [ 3, 4, 5, 6]])

三、矩阵转置

  1. axis进行赋值
  • axis的值为0的时候,将会以列作为查找单元, 当axis的值为1的时候,将会以行作为查找单元。
    1
    2
    3
    print("sum =",np.sum(a,axis=1))
    print("min =",np.min(a,axis=0))
    print("max =",np.max(a,axis=1))
  1. 矩阵的转置有两种表示方法:

    1
    2
    print(np.transpose(A))    
    print(A.T)

  2. 特殊转置clip()函数
  • 这个函数的格式是clip(Array,Array_min,Array_max),顾名思义,Array指的是将要被执行用的矩阵,而后面的最小值最大值则用于让函数判断矩阵中元素,将矩阵中比最小值小的或者比最大值大的元素转换为最小值或者最大值。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    print(A)
    # array([[14,13,12,11]
    # [10, 9, 8, 7]
    # [ 6, 5, 4, 3]])

    print(np.clip(A,5,9))
    # array([[ 9, 9, 9, 9]
    # [ 9, 9, 8, 7]
    # [ 6, 5, 5, 5]])