矩阵乘法
仅为初学者的理解,不喜勿喷
矩阵,即为如下形式的结构:
0 1 1 1 1 0 1 0 1 \begin{matrix} 0&1&1\\ 1&1&0\\ 1&0&1\\ \end{matrix} 011110101
既然你准备仔细阅读这篇文章,那么相信你应对矩阵(matrices)有一定的了解,这里就不再赘述,直接进入正题。
首先,要明确的是,矩阵乘法不同于数乘,用一个比喻应该把它当成普通式子计算的外语来学,不带着对普通式子的想法来学线性代数,或许会轻松很多。
1.向量乘法
矩阵乘法的前置内容应当懂得向量乘法,这里简单回顾一下。
a ⃗ \vec{a} a = (x , y , z) , b ⃗ \vec{b} b = ( i , j , k )
a ⃗ ⋅ b ⃗ = \vec{a} \cdot \vec{b}= a⋅b=xi + yj + zk
好了,敲黑板,上面的算法使我们大家都知道的,但是我们现在引入一个新的概念:线性组合,下面便是向量a和向量b的线性组合的例子。
m a ⃗ + n b ⃗ m\vec{a} + n\vec{b} ma+nb
此时的m与n取任意值都能得到一个向量a和向量b的线性组合。
线性组合的概念后面会经常提到,请把它当成如实数一样的基本名词放在心上。
2.矩阵乘向量
例:
[ 2 a + 3 b + 4 c 2 d + 3 e + 4 f 2 g + 3 h + 4 i ] = [ a b c d e f g h i ] [ 2 3 4 ] (1) \left[ \begin{matrix} 2a+3b+4c \\ 2d+3e+4f\\ 2g+3h+4i \end{matrix} \right] = \left[ \begin{matrix} a & b & c\\ d & e & f\\ g & h & i \end{matrix} \right] \left[ \begin{matrix} 2 \\ 3 \\ 4 \end{matrix} \right] \tag{1} 2a+3b+4c2d+3e+4f2g+3h+4i = adgbehcfi 234 (1)
ok,这里是第一个关于矩阵乘法反常识或者说与普通乘法不一样的东西,那就是乘数在左还是在右有区别。
上面这个例子就是向量右乘矩阵(向量在矩阵右侧)。
如你所见,右乘和是以列(column)为计算的中心,而这点正如我所比喻的外语一样,需要你把这个语法硬记下来。下面解释上方的式子。
如图,向量乘矩阵可以拆分成系数乘列向量(因为是右乘)。
这种写法,结合到上面所提的线性组合,我们可以说列向量乘矩阵是矩阵每个列的一种线性组合。好生体会一下这种说法。
同理,下面是一个左乘(向量在矩阵左侧)的例子。
假设我们有一个1x3的行向量 u ⃗ = ( 1 2 3 ) \vec{u} = \begin{pmatrix} 1 & 2 & 3 \end{pmatrix} u=(123) 和一个3x3的矩阵 A = ( 4 5 6 7 8 9 10 11 12 ) A = \begin{pmatrix} 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{pmatrix} A= 471058116912 。注意,行向量 u ⃗ \vec{u} u的维度是1x3,而矩阵 A A A的维度是3x3,因此它们的乘积将是一个1x3的行向量。
进行矩阵乘法运算:
u ⃗ A = ( 1 2 3 ) ( 4 5 6 7 8 9 10 11 12 ) \vec{u}A = \begin{pmatrix} 1 & 2 & 3 \end{pmatrix} \begin{pmatrix} 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{pmatrix} uA=(123) 471058116912
计算过程如下:
u
⃗
A
=
(
1
⋅
4
+
2
⋅
7
+
3
⋅
10
,
1
⋅
5
+
2
⋅
8
+
3
⋅
11
,
1
⋅
6
+
2
⋅
9
+
3
⋅
12
)
\vec{u}A = \begin{pmatrix} 1 \cdot 4 + 2 \cdot 7 + 3 \cdot 10, & 1 \cdot 5 + 2 \cdot 8 + 3 \cdot 11, & 1 \cdot 6 + 2 \cdot 9 + 3 \cdot 12 \end{pmatrix}
uA=(1⋅4+2⋅7+3⋅10,1⋅5+2⋅8+3⋅11,1⋅6+2⋅9+3⋅12)
=
(
4
+
14
+
30
,
5
+
16
+
33
,
6
+
18
+
36
)
= \begin{pmatrix} 4 + 14 + 30, & 5 + 16 + 33, & 6 + 18 + 36 \end{pmatrix}
=(4+14+30,5+16+33,6+18+36)
=
(
48
,
54
,
60
)
= \begin{pmatrix} 48, & 54, & 60 \end{pmatrix}
=(48,54,60)
第一个例子以字母与数字为例,第二个例子以纯数字为例,细品这两个例子你大概会微微抓住一点其中的要义。
但是不用去深究其中原理,现在我们就把它当成一个外语语法,基本没有什么为什么,让我们接着往下看更根本的矩阵乘法。
矩阵乘法
如向量乘矩阵一般,矩阵乘法分为左乘与右乘。
这里先看右乘:
这是一张及其抽象的图,美术水平就这样,大家先见谅
我看到的书或者资料上总是先从方阵开始举例子,但是这给当时第一次接触矩阵的我深深的疑惑,行和列不等该怎么办?
因此我这里直接从普遍情况说起。
如图,有一个 m 乘 n 的矩阵与 n 乘 p的矩阵相乘。
n被高亮的原因是当左边矩阵的列数不等于右边矩阵的行数时,两矩阵不能相乘。
这个条件由下面的矩阵乘法计算方法导出。
同样的,我们先从右乘讲起。
右乘本质上是计算一种左边矩阵A各列的线性组合。 这篇文章写了这么多字,全都是为了让你明白这句话的含义,或者说引导你明白这句话。
如图,结果矩阵的蓝色列(第一列)等于矩阵A乘矩阵2的第一列(绿色列向量)。这样横着看或许有点反常识(我觉得线性代数都挺反常识的 ),下面这幅图倒过来你们应该就能明白算法了。
分解到这步的计算方法就和上面讲的矩阵乘向量一模一样了。
如果你还没懂,可以自己在草稿本上编一组数据,模拟几遍这个过程,你对矩阵乘法的了解就越来越深刻了。
如果你认为自己已经明白了矩阵乘法,那么不妨将我没列出来的左乘用同样的道理写出来。
以上内容全部完成后,恭喜你,基本掌握了矩阵乘法!