Numpy矩阵基本运算

1、python矩阵操作

  • 引入库:

    import numpy as np
  • 创建一个二维矩阵:

    >>>a = np.mat([[1, 2, 3], [4, 5, 6]])
  • 打印a矩阵:

    >>>a
    matrix([[1, 2, 3],
          [4, 5, 6]])
  • 打印a矩阵形状:

    >>>a.shape
    (2,3)
  • 转置a矩阵:

    >>>a.T
    matrix([[1, 4],
          [2, 5],
          [3, 6]])
  • 使用二维数组代替矩阵来进行矩阵运算

    >>>b = np.array([[1, 2, 3], [4, 5, 6]])
    >>>b
    array([[1, 2, 3],
         [4, 5, 6]])
  • 矩阵加减法

    >>>a+b
    matrix([[ 2,  4,  6],
          [ 8, 10, 12]])
    >>>a-b
    matrix([[0, 0, 0],
          [0, 0, 0]])

    2、python矩阵乘法

  • 使用二维数组创建两个矩阵A和B

    >>>A = np.array([[1, 2, 3], [4, 5, 6]])
    >>>B = A.T
    >>>A
    array([[1, 2, 3],
         [4, 5, 6]])
    >>>B
    array([[1, 4],
         [2, 5],
         [3, 6]])
  • 一个矩阵的数乘,其实就是矩阵的每一个元素乘以该数

    >>>2 * A
    array([[ 2,  4,  6],
         [ 8, 10, 12]])
  • dot 函数用于矩阵乘法,对于二维数组,它计算的是矩阵乘积,对于一维数组,它计算的是内积

    >>>np.dot(A, B)
    array([[14, 32],
         [32, 77]])
    >>>np.dot(B, A)
    array([[17, 22, 27],
         [22, 29, 36],
         [27, 36, 45]])
    注意交换矩阵的前后位置会导致不同的结果
  • 再创建一个二维数组,验证矩阵乘法的结合性

    >>>C = np.array([[1, 2], [1, 3]])
    >>>np.dot(np.dot(A, B), C)
    array([[ 46, 124],
         [109, 295]])
    >>>np.dot(A, np.dot(B, C))
    array([[ 46, 124],
         [109, 295]])
  • 验证矩阵加法的分配性:(A+B)C=AC+BC

    >>>A = B - 1
    >>>np.dot(A+B, C)
    array([[ 8, 23],
         [12, 33],
         [16, 43]])
    >>>np.dot(A, C) + np.dot(B, C)
    array([[ 8, 23],
         [12, 33],
         [16, 43]])
  • 数乘的结合性

    >>>2*(np.dot(A, C))
    array([[ 6, 18],
         [10, 28],
         [14, 38]])
    >>>np.dot(2*A, C)
    array([[ 6, 18],
         [10, 28],
         [14, 38]])
  • 使用 eye 创建一个单位矩阵

    >>>D = np.eye(2)
    array([[1., 0.],
         [0., 1.]])
  • 一个矩阵乘以一个单位矩阵,还是它本身

    >>>C
    array([[1, 2],
         [1, 3]])
    >>>np.dot(C, D)
    array([[1., 2.],
         [1., 3.]])

    3、python矩阵转置

    矩阵的转置就是将矩阵的行变为列,将列变为行
  • 第一个性质矩阵转置的转置就是它本身:(A')' = A

    >>>A = np.array([[1, 2, 3], [4, 5, 6]])
    >>>A
    array([[1, 2, 3],
         [4, 5, 6]])
    >>>A.T.T
    array([[1, 2, 3],
         [4, 5, 6]])
  • 创建两个相同尺寸的矩阵

    >>>B = A.T
    array([[1, 4],
         [2, 5],
         [3, 6]])
    >>>C = B - 1
    array([[0, 3],
         [1, 4],
         [2, 5]])
  • 验证矩阵转置的第二个性质:(A±B)' = A' ± B'

    >>>(B+C).T
    array([[ 1,  3,  5],
         [ 7,  9, 11]])
    >>>B.T+C.T
    array([[ 1,  3,  5],
         [ 7,  9, 11]])
  • 验证矩阵转置的第三个性质:(KA)' = KA'

    >>>(2 * A).T
    array([[ 2,  8],
         [ 4, 10],
         [ 6, 12]])
    >>>2*AT
    array([[ 2,  8],
         [ 4, 10],
         [ 6, 12]])
  • 验证矩阵转置的第四个性质:(AXB)' = B' X A'

    >>>np.dot(A, B).T
    array([[14, 32],
         [32, 77]])
    >>>np.dot(B.T, A.T)
    array([[14, 32],
         [32, 77]])

    4、python求方阵的迹

  • 创建一个方阵(方阵也就是行数等于列数的矩阵)

    >>>E = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    array([[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]])
    >>>np.trace(E)
    15
  • 验证一下方阵的迹等于方阵的转置的迹

    >>>np.trace(E)
    >>>np.trace(E.T)
    15
  • 验证一下方阵的乘积的迹

    >>>F = E - 2
    >>>np.trace(np.dot(E, F))
    >>>np.trace(np.dot(F, E))
    171
  • 验证一下方阵的和的迹等于方阵的迹的和

    >>>np.trace(E + F)
    >>>np.trace(F + E)
    24

    5、python方阵的行列式计算方法

  • 创建两个方阵,使用 linalg.det 方法求得方阵E和方阵F的行列式

    >>>E = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
    >>>F = np.array([[1, 2], [1, 3]])
    >>>np.linalg.det(E)
    0.0
    >>>np.linalg.det(F)
    1.0

    6、python求逆矩阵/伴随矩阵

    逆矩阵的定义:

    设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩阵B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。当矩阵A的行列式|A|不等于0时才存在可逆矩阵。
    伴随矩阵的定义:
    设A为n节方阵,则由A的行列式|A|中各个元素的代数余子式Aij所构成的如下矩阵,~矩阵无法显示~,称为矩阵A的伴随矩阵,或简称 “伴随阵”
  • 创建一个方阵,求行列式

    >>>A = np.array([[1, -2, 1], [0, 2, -1], [1, 1, -2]])
    >>>A_abs = np.linalg.det(A)
    -3.0000000000000004
  • 使用 linalg.inv 求得方阵A的逆矩阵

    >>>B = np.linalg.inv(A)
    array([[ 1.        ,  1.        ,  0.        ],
         [ 0.33333333,  1.        , -0.33333333],
         [ 0.66666667,  1.        , -0.66666667]])
  • 利用公式求伴随矩阵

    >>>A_bansui = B * A_abs
    array([[-3., -3., -0.],
         [-1., -3.,  1.],
         [-2., -3.,  2.]])