<< 返回 Menu

$a_{ij}$ 第i行第j列 $$ A = \begin{pmatrix}a_{11} & a_{12} & a_{13} & a_{14} \\ a_{21} & a_{22} & a_{23} & a_{24} \\ a_{31} & a_{32} & a_{33} & a_{34} \end{pmatrix} $$

矩阵加法

$$ A = \begin{pmatrix}a_{11} & a_{12} & ... & a_{1c} \\ a_{21} & a_{22} & ... & a_{2c} \\ ... & ... & ... & ... \\ a_{r1} & a_{r2} & ... & a_{rc} \end{pmatrix} B = \begin{pmatrix}b_{11} & b_{12} & ... & b_{1c} \\ b_{21} & b_{22} & ... & b_{2c} \\ ... & ... & ... & ... \\ b_{r1} & b_{r2} & ... & b_{rc} \end{pmatrix} $$$$A+B = \begin{pmatrix}a_{11}+b_{11} & a_{12}+b_{12} & ... & a_{1c}+b_{1c} \\ a_{21}+b_{21} & a_{22}+b_{22} & ... & a_{2c}+b_{2c} \\ ... & ... & ... & ... \\ a_{r1}+b_{r1} & a_{r2}+b_{r2} & ... & a_{rc}+b_{rc} \end{pmatrix}$$

矩阵数量乘法

$$k \cdot A = \begin{pmatrix}k \cdot a_{11} & k \cdot a_{12} & ... & k \cdot a_{1c} \\ k \cdot a_{21} & k \cdot a_{22} & ... & k \cdot a_{2c} \\ ... & ... & ... & ... \\ k \cdot a_{r1} & k \cdot a_{r2} & ... & k \cdot a_{rc} \end{pmatrix}$$

矩阵和向量相乘

$$ \begin{pmatrix}1 & -0.2 & 0.1 & 0.5 \\ -0.5 & -1 & 0.2 & 0.1 \\ 0 & -0.4 & -1 & 0.3 \\ -0.2 & 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x_{it} \\ x_{e} \\ x_{m} \\ x_{h} \end{pmatrix} = \begin{pmatrix}x_{it} - 0.2x_{e} + 0.1x_{m} + 0.5x_{h} \\ - 0.5x_{it} - x_{e} + 0.2x_{m} + 0.1x_{h} \\ - 0.4x_{e} - x_{m} + 0.3x_{h} \\ - 0.2x_{it} + x_{h} \end{pmatrix} $$

矩阵A的列数必须和向量的元素个数一致
矩阵A的行数没有限制

$$T \cdot \vec{a} = \vec{b}$$

矩阵T实际上将向量a转换成了向量b
可以把矩阵理解成向量的函数

矩阵乘法

$$A \cdot B = A \cdot \begin{pmatrix}| & | & & | \\ \vec{c_1} & \vec{c_2} & ... & \vec{c_n} \\ | & | & & | \end{pmatrix} = \begin{pmatrix}| & | & & | \\ A \cdot \vec{c_1} & A \cdot \vec{c_2} & ... & A \cdot \vec{c_n} \\ | & | & & | \end{pmatrix}$$$$\begin{pmatrix}-- & \vec{r_1} & -- \\ -- & \vec{r_2} & -- \\ & ... & \\ -- & \vec{r_m} & -- \end{pmatrix} \cdot \begin{pmatrix}| & | & & | \\ \vec{c_1} & \vec{c_2} & ... & \vec{c_n} \\ | & | & & | \end{pmatrix} $$$$= \begin{pmatrix}\vec{r_1} \cdot \vec{c_1} &\vec{r_1} \cdot \vec{c_2} & ... & \vec{r_1} \cdot \vec{c_n} \\ \vec{r_2} \cdot \vec{c_1} &\vec{r_2} \cdot \vec{c_2} & ... & \vec{r_2} \cdot \vec{c_n} \\ ... & ... & & ... \\ \vec{r_m} \cdot \vec{c_1} &\vec{r_m} \cdot \vec{c_2} & ... & \vec{r_m} \cdot \vec{c_n} \end{pmatrix} $$

矩阵A的列数必须和矩阵B的行数一致
A是mk的矩阵,B是kn的矩阵,则结果矩阵为m*n的矩阵
矩阵乘法不遵守交换律 $A \cdot B \neq B \cdot A$ 即使可以相乘(如方阵)结果也可能不一样
矩阵乘法遵守:$(A \cdot B) \cdot C = A \cdot (B \cdot C) \neq (B \cdot C) \cdot A$
矩阵乘法遵守:$A \cdot (B+C) = A \cdot B + A \cdot C$ 或 $(B+C) \cdot A = B \cdot A + C \cdot A$

矩阵乘法的性质

矩阵的幂: $A^k = A \cdot A \cdot ... \cdot A$
只有方阵才可以进行矩阵的幂运算
$(A+B)^2 = A^2 + A \cdot B + B \cdot A + B^2 \neq A^2 + 2AB + B^2$

矩阵的转置

$P=\begin{pmatrix} 0 & 0 \\ 4 & 0 \\ 5 & 3 \end{pmatrix}$ $P^T = \begin{pmatrix} 0 & 4 & 5 \\ 0 & 0 & 3 \end{pmatrix}$
if $A = (a_{ij})$ then $A^T = (a_{ji})$
$(A^T)^T = A$
$(A+B)^T = A^T + B^T$
$(k \cdot A)^T = k \cdot A^T$
$(A \cdot B)^T = B^T \cdot A^T$

矩阵不是简单的m*n个数

矩阵是个系统

矩阵是向量的函数

In [20]:
import numpy as np

# 矩阵的创建
# 默认是以行为存储单位

A = np.array([[1,2],[3,4]])
print("矩阵A:",A)
print("矩阵A的形状:",A.shape)
print("矩阵A的转置矩阵:",A.T)
print("矩阵A的第二行第二列:",A[1,1])
print("矩阵A的第一行:",A[0]) # 取特定行 或者 A[0,:]
print("矩阵A的第二列:",A[:,1]) # 取特定列
矩阵A: [[1 2]
 [3 4]]
矩阵A的形状: (2, 2)
矩阵A的转置矩阵: [[1 3]
 [2 4]]
矩阵A的第二行第二列: 4
矩阵A的第一行: [1 2]
矩阵A的第二列: [2 4]
In [27]:
# 矩阵的基本运算

B = np.array([[5,6],[7,8]])
print("A + B = {}".format(A+B))
print("A * 10 = {}".format(A*10))
print("A x B = {}".format(A.dot(B)))
A + B = [[ 6  8]
 [10 12]]
A * 10 = [[10 20]
 [30 40]]
A x B = [[19 22]
 [43 50]]

单位矩阵

$I_n = (i_{kj})\left\{ \begin{array}{ll} 1 & \mbox{if } k = j \\ 0 & \mbox{if } k \neq j \end{array} \right.$

$I_n = \begin{pmatrix} 1 & 0 & ... & 0 \\ 0 & 1 & ... & 0 \\ ... & ... & ... & ... \\ 0 & 0 & ... & 1 \end{pmatrix}$

性质

$I \cdot A = A$
$A \cdot I = A$

逆矩阵

回忆:数字系统: $x \cdot (x^{-1})=1$

数字系统中只有0没有倒数,而矩阵中有无数矩阵是没有逆矩阵的,一旦找到矩阵有逆矩阵,则成为可逆矩阵,或者叫非奇异矩阵(non-singular),因为99.999%的随机生成的矩阵都是可逆的。

矩阵中 $AB = BA = I$ ($I$是单位矩阵),则称B是A的逆矩阵,记做: $B = A^{-1}$
对于矩阵A,存在矩阵B,满足$AB = BA = I$ ,矩阵A可逆,B唯一;

不可逆的矩阵称为奇异矩阵(singular)

如果 $BA = I$,则称B是A的左逆矩阵;
如果 $AC = I$,则称C是A的右逆矩阵;
如果一个矩阵A既存在左逆矩阵B,又存在右逆矩阵C,则B=C
可逆矩阵一定是方阵,只有方阵才有可能可逆,非方阵一定不可逆

$ A^0 = I $
$ A^{-1} = A的逆矩阵 $
$ A^{-2} = (A^{-1})^2 (A的逆矩阵的平方)$

In [33]:
# 单位矩阵
I = np.identity(2)
print(I)
print("A.dot(I)={}".format(A.dot(I)))
print("I.dot(A)={}".format(I.dot(A)))
[[1. 0.]
 [0. 1.]]
A.dot(I)=[[1. 2.]
 [3. 4.]]
I.dot(A)=[[1. 2.]
 [3. 4.]]
In [36]:
# 逆矩阵
invA = np.linalg.inv(A)
print("invA: ",invA)
print("invA.dot(A)={}".format(invA.dot(A)))
invA:  [[-2.   1. ]
 [ 1.5 -0.5]]
invA.dot(A)=[[1.0000000e+00 4.4408921e-16]
 [0.0000000e+00 1.0000000e+00]]
In [37]:
C = np.array([[1,2,3], [4,5,6]])
np.linalg.inv(C) # 报错“Last 2 dimensions of the array must be square”,因为C不是方阵
---------------------------------------------------------------------------
LinAlgError                               Traceback (most recent call last)
<ipython-input-37-f77257908d09> in <module>
      1 C = np.array([[1,2,3], [4,5,6]])
----> 2 np.linalg.inv(C) # 报错,因为C不是方阵

/usr/lib/python3/dist-packages/numpy/linalg/linalg.py in inv(a)
    544     a, wrap = _makearray(a)
    545     _assertRankAtLeast2(a)
--> 546     _assertNdSquareness(a)
    547     t, result_t = _commonType(a)
    548 

/usr/lib/python3/dist-packages/numpy/linalg/linalg.py in _assertNdSquareness(*arrays)
    211         m, n = a.shape[-2:]
    212         if m != n:
--> 213             raise LinAlgError('Last 2 dimensions of the array must be square')
    214 
    215 def _assertFinite(*arrays):

LinAlgError: Last 2 dimensions of the array must be square

$(A \cdot B)^T = B^T \cdot A^T$
$(A \cdot B)^{-1} = B^{-1} \cdot A^{-1}$
一起记忆,但只在有些特定情况下,转置才等于逆,不能混为一谈。
$ (A^T)^{-1} = (A^{-1})^T $

矩阵和向量相乘 视角

$ \begin{pmatrix}1 & 2 \\ 4 & 5 \end{pmatrix} \cdot \begin{pmatrix}x \\ y \end{pmatrix} $
= $\begin{pmatrix}x + 2y\\ 4x + 5y \end{pmatrix}$ (行视角)
= $\begin{pmatrix} 1 \\ 4 \end{pmatrix} x + \begin{pmatrix} 2 \\ 5 \end{pmatrix} y $ (列视角)