用numpy 实现矩阵的运算

用numpy 实现矩阵的运算

  • 定义矩阵

    例如:定义如下矩阵

    \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 = [ 1 3 3 4 ] ​ \begin{bmatrix}1 & 3\\\\3 &4\end{bmatrix}​ 1334

      A − 1 A^-1 A1 = [ 4 / 9 1 / 3 1 / 3 0 ] ​ \begin{bmatrix}4/9 & 1/3\\\\1/3 &0\end{bmatrix}​ 4/91/31/30

      [ 1 3 3 4 ] \begin{bmatrix}1 & 3\\\\3 &4\end{bmatrix} 1334 [ 4 / 9 1 / 3 1 / 3 0 ] \begin{bmatrix}4/9 & 1/3\\\\1/3 &0\end{bmatrix} 4/91/31/30= [ 1 0 0 1 ] ​ \begin{bmatrix}1 & 0\\\\0 &1\end{bmatrix}​ 1001

      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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值