文章目录
前言
这篇博客写在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=∑knaikbkj,其中 a i \bm{a}_i ai为矩阵A中第 i i i行元素组成的列向量(线性代数中习惯将向量看出列向量,加上转置符号 T T T就变成了行向量。), b j \bm{b}_j bj为矩阵B中第 j j j列元素组成的列向量。
二、线性组合与分块矩阵乘法
在1.1中,我们就介绍过线性组合的概念,我们说线性方程组 A x = b Ax=b Ax=b可以看成是找到对 A A A中列向量的一组线性组合系数,去得到 b b b。上述的矩阵乘法运算规则,我们也可以用线性组合的方式去看,即右边矩阵的每一列都是在对左边矩阵的列向量做线性组合,组合完的列向量就放在输出矩阵的对应列。
类似的,也会有将左边矩阵的每一行看作是是对右边矩阵的每一行做线性组合。就不再赘述。
下面再介绍一下更一般的分块矩阵乘法。即两个矩阵 A B AB AB相乘,可以对其进行任意的分块,就像切豆腐一样,然后得到乘法结果:
A B = ( A 11 A 12 A 21 A 22 ) \mathbf{AB} = \left( \begin{array}{ccc} A_{11} & A_{12} \\ A_{21}&A_{22}\\ \end{array} \right) AB=(A11A21A12A22) ( B 11 B 12 B 21 B 22 ) \left( \begin{array}{ccc} B_{11} & B_{12} \\ B_{21}&B_{22}\\ \end{array} \right) (B11B21B12B22)
= ( A 11 B 11 + A 12 B 21 A 11 B 12 + A 12 B 22 A 21 B 11 + A 22 B 21 A 21 B 12 + A 22 B 22 ) =\left( \begin{array}{ccc} A_{11}B_{11}+A_{12}B_{21} & A_{11}B_{12}+A_{12}B_{22} \\ A_{21}B_{11}+A_{22}B_{21}&A_{21}B_{12}+A_{22}B_{22}\\ \end{array} \right) =(A11B11+A12B21A21B11+A22B21A11B12+A12B22A21B12+A22B22)
其中 A i j A_{ij} Aij与 B i j B_{ij} Bij都是矩阵,因此不要写错了乘法顺序。不过该分块有一个要求,那就是要保证分完块以后能进行矩阵乘法,只包括两方面:一方面分完的每个小块之间要能乘,即 A i j A_{ij} Aij与 B i j B_{ij} Bij要行列匹配;另一方面分完以后块也要行列匹配,即左边矩阵按列分了 n n n块的话,右边矩阵也要按行分 n n n块。
引入分块矩阵乘法以后,我们可以发现上述列向量的线性组合的方式去看待矩阵乘法,其实就是把左边矩阵按列数分块,右边矩阵按行数分块进行的分块矩阵乘法。行向量的线性组合也是同理,不再赘述。
总结
本文完善了矩阵运算的说明,其中重点是矩阵乘法中的线性组合的理解方式,以及分块矩阵乘法。在以后的计算中适当的通过分块(包括线性组合)的方式进行矩阵乘法运算,可以简化过程,并且理解到不一样的地方,让我们拭目以待。