前言
这篇博客写在1.5 矩阵的逆之后,很惭愧,写完了逆的部分,发现还没有完整地介绍一下矩阵的运算,直接加在逆那篇又嫌冗长,只好单独补一篇。
没写也是因为纠结需不需要写,矩阵的运算像从小就学的加减乘除四项运算一样刻入脑海,以至于都忽视了它。不过本着系列的完整性,还是写吧。
一、为什么引入矩阵的运算
怎么看待矩阵的运算呢?其实矩阵的运算是给出了一种批量进行大量运算的模式。我们从小学的四项运算很直观清楚,但是对计算机来说不够效率。如果每次只能串联的进行一次一次的两个数的运算,就没必要大费周章地集成那么多的运算单元了。所以矩阵就是把这些要进行运算的数打包起来,利用矩阵运算的规则一次性处理这些相似的计算。
二、矩阵的加法
矩阵的加法与向量的加法相同,即进行相同位置元素的标量加法即可。不同的只是矩阵中有行列两个维度,两个维度的位置都要匹配上。其实我们有三个不同的维度去看待矩阵的方式,一个是由一堆元素组成的阵列,一个是不同行列向量的排列,还有就是具有两个维度的“向量”。
减法与加法本质上是一样的,只要引入加法零元(具体内容可以参考1.5矩阵的逆),就可以类似相反数一样定义相反矩阵,减去矩阵 A A A就是加上 A A A的相反矩阵 − A -A −A。
三、矩阵的乘法
介绍矩阵乘法我们可以从向量点乘开始。向量点乘是对应元素相乘,然后求和。一个 1 × n 1\times n 1×n的矩阵与 n × 1 n\times 1 n×1的矩阵相乘运算过程就相当于一个行向量与列向量相乘。只是这里的相应元素与向量中相同序列号不同,这里是左边矩阵元素的列数,要对应右边矩阵元素的行数。
进一步,把左边矩阵增加一行,变成2 × n \times n ×n。其实运算过程仍然是类似的,不过是把过程重复了一次,用第一行与右边的列向量做"点乘"得到计算结果的第一行第一列的元素,用第二行与右边列向量做“点乘”,得到第二行第一列的元素。可以看到,左边矩阵的行数决定了“点乘”结果的所在行数,右边矩阵的列数决定了“点乘”结果所在列数。
再扩展,就是把右边矩阵增加一列,那就是进行四次运算,左第一行与右边两列分别“点乘”,得到第一行的两个元素,左第二行与右边两列分别“点乘”,得到第二行的两个元素。
至此,矩阵乘法的运算规则就清楚了,对应矩阵乘积 A B = C AB=C AB=C,输出矩阵C中第 i i i行第 j j j列的元素 c i j = a i T b j = ∑ k n a i k b k j c_{ij}=\bm{a}^T_i\bm{b}_j=\sum_k^na_{ik}b_{kj} cij=aiTbj=∑