矩阵向量乘法
计算矩阵乘法,有多种理解方式
- 矩阵与向量的乘法,可以理解为矩阵各个列向量的线性组合
[ a b c d ] [ x y ] = [ a x + b y c x + d y ] = x [ a c ] + y [ b d ] \begin{bmatrix}a&b\\c&d\end{bmatrix}\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}ax+by\\cx+dy\end{bmatrix}=x\begin{bmatrix}a\\c\end{bmatrix}+y\begin{bmatrix}b\\d\end{bmatrix} [acbd][xy]=[ax+bycx+dy]=x[ac]+y[bd]
这就是说,计算矩阵乘法有两种方式;手算时显然用第二种”列向量的线性组合“更容易计算
- 同样的,行向量与矩阵相乘,可以理解为矩阵各个行向量的线性组合
[ x y ] [ a b c d ] = [ a x + c y b x + d y ] = x [ a b ] + y [ c d ] \begin{bmatrix}x&y\end{bmatrix}\begin{bmatrix}a&b\\c&d\end{bmatrix}=\begin{bmatrix}ax+cy&bx+dy\end{bmatrix}=x\begin{bmatrix}a&b\end{bmatrix}+y\begin{bmatrix}c&d\end{bmatrix} [xy][acbd]=[ax+cybx+dy]=x[ab]+y[cd]
这样的观点非常重要,一定要习惯将矩阵线向量乘法视为向量的线性组合
矩阵与矩阵的乘法
矩阵A与矩阵B的乘法(A的列数必须等于B的行数),定义为
c
23
=
∑
k
=
1
n
a
2
k
b
k
3
c_{23}=\sum_{k=1}^{n}a_{2k}b_{k3}
c23=k=1∑na2kbk3
【观点1】两个矩阵相乘AB=C,结果中的元素 c i j c_{ij} cij来自于矩阵A的第 i i i行和B的第 j j j列的点积
- 这就是说,结果只的第 i i i行第 j j j列,来自于矩阵A的第 i i i个行向量和矩阵B的第 j j j个列向量
例如,
[ 1 0 0 2 1 0 0 0 1 ] [ 1 0 1 0 1 0 0 0 1 ] = [ 1 0 1 2 1 2 0 0 1 ] \begin{bmatrix}1&0&0\\2&1&0\\0&0&1\end{bmatrix}\begin{bmatrix}1&0&1\\0&1&0\\0&0&1\end{bmatrix}=\begin{bmatrix}1&0&1\\2&1&2\\0&0&1\end{bmatrix} ⎣ ⎡120010001⎦ ⎤⎣ ⎡100010101⎦ ⎤=⎣ ⎡120010121⎦ ⎤
结果 c 23 = [ 2 1 0 ] [ 1 0 1 ] = 2 c_{23}=\begin{bmatrix}2&1&0\end{bmatrix}\begin{bmatrix}1\\0\\1\end{bmatrix}=2 c23=[210]⎣ ⎡101⎦ ⎤=2
矩阵向量乘法的推广:用向量的观点看矩阵与矩阵的乘法
进一步的,我们将矩阵看作向量组,矩阵与矩阵相乘 ⟺ \iff ⟺矩阵与向量组相乘
- 两个矩阵相乘AB=C,C的第 j j j列,来自矩阵A 乘以 B的第 j j j个列向量(矩阵A的列向量的线性组合)
- 两个矩阵相乘AB=C,C的第 i i i行,来自A的第 i i i个行向量 乘以 矩阵B(矩阵B的行向量的线性组合)
由上面可,得矩阵乘矩阵,数值上就是对其中一个矩阵做行/列变换:(这个“做变换”是相对的,可以看作左侧矩阵对右侧矩阵做列变换,也可以看作右侧矩阵对左侧矩阵做行变换)
- 矩阵B右乘矩阵A,就是对A做列变换
具体而言,【观点2】B的第 j j j个列向量,指出了A的列向量,是如何线性组合得到C矩阵的第 j j j列的
并且,B的其余列向量,不会参与到运算中,不会影响C的第 j j j列结果
任何向量右乘矩阵,一定得到矩阵列向量的线性组合,因此结果仍然位于矩阵的列空间中,这就是为什么矩阵视为线性变换时,其列向量就是“新的坐标系的基向量”
- 矩阵A左乘矩阵B,就是对B做行变换
具体而言,【观点3】A的第 i i i个行向量,指出了B的行向量,是如何线性组合得到C矩阵的第 i i i行的
并且,A的其余行向量,不会参与到运算中,不会影响C的第 i i i行结果
例如,
[ 1 0 0 2 1 0 0 0 1 ] [ 1 0 1 0 1 0 0 0 1 ] = [ 1 0 1 2 1 2 0 0 1 ] \begin{bmatrix}1&0&0\\2&1&0\\0&0&1\end{bmatrix}\begin{bmatrix}1&0&1\\0&1&0\\0&0&1\end{bmatrix}=\begin{bmatrix}1&0&1\\2&1&2\\0&0&1\end{bmatrix} ⎣ ⎡120010001⎦ ⎤⎣ ⎡100010101⎦ ⎤=⎣ ⎡120010121⎦ ⎤
可以看作:
①C的第二行源于B中行向量的线性组合:矩阵A左乘矩阵B,就是B的第一行x2,加到B的第二行
②C的第三列源于A中列向量的线性组合:矩阵B右乘矩阵A,就是A的第一列x1,加到A的第三列
又如,一种特殊的情况是,列向量乘以行向量,得到矩阵
[ 2 3 4 ] [ 1 4 ] = [ 2 8 3 12 4 16 ] \begin{bmatrix}2\\3\\4\end{bmatrix}\begin{bmatrix}1&4\end{bmatrix}=\begin{bmatrix}2&8\\3&12\\4&16\end{bmatrix} ⎣ ⎡234⎦ ⎤[14]=⎣ ⎡23481216⎦ ⎤
①C的第一/二/三行,就是行向量B的2/3/4倍
②C的第一/二列,就是列向量A的1/4倍
由此,产生【观点4】矩阵C= ∑ k = 1 n ( A 的第 k 列 ⋅ B 的第 k 行 ) \sum_{k=1}^n(A的第k列\cdot B的第k行) ∑k=1n(A的第k列⋅B的第k行)
例如, [ 1 2 2 3 3 4 ] [ 1 2 0 0 ] = [ 1 2 3 ] [ 1 2 ] + [ 2 3 4 ] [ 0 0 ] \begin{bmatrix}1&2\\2&3\\3&4\end{bmatrix}\begin{bmatrix}1&2\\0&0\end{bmatrix}=\begin{bmatrix}1\\2\\3\end{bmatrix}\begin{bmatrix}1&2\end{bmatrix}+\begin{bmatrix}2\\3\\4\end{bmatrix}\begin{bmatrix}0&0\end{bmatrix} ⎣ ⎡123234⎦ ⎤[1020]=⎣ ⎡123⎦ ⎤[12]+⎣ ⎡234⎦ ⎤[00]
一个矩阵可以对其他矩阵做行/列变换,我们也能复原这样的变换,工具就是逆矩阵
矩阵 [ 1 0 0 2 1 0 0 0 1 ] \begin{bmatrix}1&0&0\\2&1&0\\0&0&1\end{bmatrix} ⎣ ⎡120010001⎦ ⎤在其他矩阵的第二行中加上2倍第一行
如果要还原,就要从其他矩阵的第二行中减去2倍第一行,这对应了其逆矩阵 [ 1 0 0 − 2 1 0 0 0 1 ] \begin{bmatrix}1&0&0\\-2&1&0\\0&0&1\end{bmatrix} ⎣ ⎡1−20010001⎦ ⎤
置换矩阵
置换矩阵(permutation matrix) P \mathbf P P:即行重新排列过的单位阵
- 置换矩阵一定可逆,(通过行交换一定能回到单位阵),并且其逆矩阵 P − 1 = P T \mathbf P^{-1}=\mathbf P^T P−1=PT
- 从而有: P P T = P T P = I \mathbf P\mathbf P^T=\mathbf P^T\mathbf P=\mathbf I PPT=PTP=I
根据上面“矩阵乘法就是对矩阵做行/列变换”的观点,我们就能理解置换矩阵的作用了
例如,
[
0
1
0
1
0
0
0
0
1
]
\begin{bmatrix}0&1&0\\1&0&0\\0&0&1\end{bmatrix}
⎣
⎡010100001⎦
⎤这个置换矩阵
- 如果左乘另一矩阵,相当于交换该矩阵的一行和二行
- 如果右乘另一矩阵,相当于交换该矩阵的一列和二列