美文网首页
用numpy 实现矩阵的运算

用numpy 实现矩阵的运算

作者: 一百万个不确定 | 来源:发表于2019-03-21 23:46 被阅读0次
    • 定义矩阵

      例如:定义如下矩阵

      \mathbf{B} = \begin{bmatrix} 3 & 5 & 7 \\ 4 & 6 & 8 \end{bmatrix}

    _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]])
      
    • 转置

      \begin{bmatrix} 1 & 2 & 3 \\ 0 & -6 & 7 \end{bmatrix}^T = \begin{bmatrix} 1 & 0 \\ 2 & -6 \\ 3 & 7 \end{bmatrix}

      使用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 = \begin{bmatrix}1&3\\\\3 &4\end{bmatrix}

      A^-1 = \begin{bmatrix}4/9 & 1/3\\\\1/3 &0\end{bmatrix}

      \begin{bmatrix}1&3\\\\3 &4\end{bmatrix} \begin{bmatrix}4/9 & 1/3\\\\1/3 &0\end{bmatrix}=\begin{bmatrix}1 & 0\\\\0 &1\end{bmatrix}

      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 实现矩阵的运算

          本文链接:https://www.haomeiwen.com/subject/soqkvqtx.html