用numpy 实现矩阵的运算

  • 定义矩阵

    例如:定义如下矩阵

_B = [[3,5,7],[4,6,8]]
B = np.asarray(_B)
B 

结果:
array([[3, 5, 7],
       [4, 6, 8]])
       
A=np.mat("3 5 7;4 6 8")

print(A)
结果:
[[3 5 7]
 [4 6 8]]
  • 矩阵的基本运算

    • 加(减)法

      \begin{bmatrix} 1 & 3 & 1 \\ 1 & 0 & 0 \end{bmatrix} + \begin{bmatrix} 0 & 0 & 5 \\ 7 & 5 & 0 \end{bmatrix} = \begin{bmatrix} 1+0 & 3+0 & 1+5 \\ 1+7 & 0+5 & 0+0 \end{bmatrix} = \begin{bmatrix} 1 & 3 & 6 \\ 8 & 5 & 0 \end{bmatrix}

      _B = [[1,3,1],[1,0,0]]
      B = np.asarray(_B)
      
      _A = [[0,0,5],[7,5,0]]
      A = np.asarray(_A)
      
      A+B
      
      array([[1, 3, 6],
             [8, 5, 0]])
      
  • 数乘

    2 \cdot \begin{bmatrix} 1 & 8 & -3 \\ 4 & -2 & 5 \end{bmatrix} = \begin{bmatrix} 2 \cdot 1 & 2\cdot 8 & 2\cdot (-3) \\ 2\cdot 4 & 2\cdot (-2) & 2\cdot 5 \end{bmatrix} = \begin{bmatrix} 2 & 16 & -6 \\ 8 & -4 & 10 \end{bmatrix}

    _A = [[1,8,-3],[4,-2,5]]
    A = np.asarray(_A)
    
    2*A
    
    array([[ 2, 16, -6],
           [ 8, -4, 10]])
    
  • 转置

    使用A.T 来表达转置

    _A = [[1,2,3],[0,6,-7]]
    A = np.asarray(_A)
    
    print(A)
    print(A.T)
    
    [[ 1  2  3]
     [ 0  6 -7]]
    
    [[ 1  0]
     [ 2  6]
     [ 3 -7]]
    
  • 矩阵乘法

    \begin{bmatrix} 1 & 0 & 2 \\ -1 & 3 & 1 \\ \end{bmatrix} \times \begin{bmatrix} 3 & 1 \\ 2 & 1 \\ 1 & 0 \end{bmatrix} = \begin{bmatrix} (1 \times 3 + 0 \times 2 + 2 \times 1) & (1 \times 1 + 0 \times 1 + 2 \times 0) \\ (-1 \times 3 + 3 \times 2 + 1 \times 1) & (-1 \times 1 + 3 \times 1 + 1 \times 0) \\ \end{bmatrix} = \begin{bmatrix} 5 & 1 \\ 4 & 2 \\ \end{bmatrix}

    使用matmul()方法

    _B = [[1,0,2],[-1,3,1]]
    B = np.asarray(_B)
    
    _A = [[3,1],[2,1],[1,0]]
    A = np.asarray(_A)
    
    np.matmul(B,A)
    
    array([[5, 1],
           [4, 2]])
    
  • 求解线性方程组
    使用np.linalg.solve()方法
    考虑以下线性方程:

    3*x + y = 9
    
    x + 2y = 8
    
    a = np.array([[3,1], [1,2]])
    b = np.array([9,8])
    x = np.linalg.solve(a, b)
    x
    array([ 2.,  3.])
    
  • 求逆矩阵

    使用np.linalg.inv()函数

    A =

    求 =

    =

    A=np.mat(np.array([[0,3],[3,4]]))
    #求A 的逆矩阵
    A_=np.linalg.inv(A)
    print("A的逆矩阵:\n",A_)
    
    #验证A*A_是否是单位矩阵
    print("A*A_:\n",A*A_)
    
    A的逆矩阵:
     [[-0.44444444  0.33333333]
     [ 0.33333333  0.        ]]
    A*A_:
     [[ 1.  0.]
     [ 0.  1.]]
    
  • 行列式

    使用np.linalg.det()函数

    import numpy as np
     
    b = np.array([[6,1,1], [4, -2, 5], [2,8,7]]) 
    print (b)
    print (np.linalg.det(b))
    print (6*(-2*7 - 5*8) - 1*(4*7 - 5*2) + 1*(4*8 - -2*2))
    
    [[ 6  1  1]
     [ 4 -2  5]
     [ 2  8  7]]
    -306.0
    -306
    
  • 特征值与特征矢量

    使用np.linalg.eig()方法

    A=np.mat("3 -2;1 0")
    
    # 求特征值 和 特征向量
    eigenvalues,eigvector=np.linalg.eig(A)
    print("特征值:",eigenvalues)
    print("特征向量:\n",eigvector)
    
    
  • 对称

    $#todo

  • 正定性

    $#todo

你可能感兴趣的:(用numpy 实现矩阵的运算)