![数学要素(全彩图解 + 微课 + Python编程)](https://wfqqreader-1252317822.image.myqcloud.com/cover/748/52842748/b_52842748.jpg)
2.3 矩阵乘法:最重要的线性代数运算规则
矩阵乘法是最重要线性代数运算,没有之一——这句话并不夸张。
矩阵乘法规则可以视作算术“九九乘法表”的进阶版。
矩阵乘法规则
A和B两个矩阵相乘的前提是矩阵A的列数和矩阵B的行数相同。A和B的乘积一般写作AB。
A和B两个矩阵相乘AB读作“matrix boldface capital A times matrix boldface capital B”或“the matrix product boldf ace capital A and boldface capital B”。
NumPy中,两个矩阵相乘的运算符为@,鸢尾花书一部分矩阵乘法也会采用@。比如,AB也记做A@B:
注意:A在左边,B在右边,不能随意改变顺序。也就是说,矩阵乘法一般情况下不满足交换律,即AB≠BA。
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P53_1140057.jpg?sign=1738830142-0AVduJfmO4r4AA1YmtEaIc7SXbMozeDG-0-89ad97232a884e70100086c524707e96)
如图2.7所示,矩阵A的形状为m行、p列,矩阵B的形状为p行、n列。A和B相乘得到矩阵C,C的形状为m行、n列,相当于消去了p。
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P53_1140059.jpg?sign=1738830142-IIvdsSFzAwGRWj10eZEWE6ihAJSpCxGd-0-34b4ef11127e3e213b5d97896b590b03)
图2.7 矩阵乘法规则
再次强调,矩阵乘法不满足交换律。也就是说,一般情况下下式不成立,即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P53_1140061.jpg?sign=1738830142-BxsGvO7RJpXDmvITM6MhCzoluGCqjvZK-0-4b2a616d7a64989d23c35756fedb6d26)
首先,B的列数和A的行数很可能不匹配。即便m=n,也就是B的列数等于A的行数,BA结果也很可能不等于AB。
两个2×2矩阵相乘
下面,用两个2×2矩阵相乘讲解矩阵乘法运算规则。
设矩阵A和B相乘结果为矩阵C,有
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P53_1140062.jpg?sign=1738830142-KSxPkaSAg3JovW8rI5EJ1Q5lJgjXARBQ-0-5ab8c0de7910463aae22fd682bcf137f)
图2.8所示为两个2×2矩阵相乘如何得到矩阵C的每一个元素。
矩阵A的第一行元素和矩阵B第一列对应元素分别相乘,再相加,结果为矩阵C的第一行、第一列元素c1,1。
矩阵A的第一行元素和矩阵B第二列对应元素分别相乘,再相加,得到c1,2。
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P54_1140063.jpg?sign=1738830142-Rdz2KmrQidZCuD0MD5mhvsXcypZHjd2F-0-b4516e4e229a4ba43b3b6c160cdb0c0a)
图2.8 矩阵乘法规则,两个2×2矩阵相乘为例
同理,依次获得矩阵C的c2,1和c2,2两个元素。
总结来说,A和B乘积C的第i行第j列的元素ci,j等于矩阵A的第i行的元素与矩阵B的第j列对应元素乘积再求和。
注意:这个矩阵运算规则既是一种发明创造,也是一种约定成俗。也就是说,这种乘法规则在被法国数学家雅克·菲利普·玛丽·比内(Jacques Philippe Marie Binet, 1786—1856)提出之后,在长期的数学实践中被广为接受。矩阵乘法可谓“成人版九九乘法表”。就像大家儿时背诵九九乘法表时一样,这里建议大家先把矩阵乘法规则背下来,熟能生巧,慢慢地大家就会通过不断学习认识到这个乘法规则的精妙之处。
Bk3_Ch2_09.py展示如何完成矩阵乘法运算。
矩阵乘法形态
图2.9所示给出了常见的多种矩阵乘法形态,每一种形态对应一类线性代数问题。图2.9中特别高亮显示出矩阵乘法中左侧矩阵的“列”和右侧矩阵的“行”。高亮的“维度”在矩阵乘法中被“消去”。鸢尾花书《矩阵力量》一册将会详细介绍图2.9每一种乘法形态。
这里特别提醒大家,初学者对矩阵乘法会产生一种错误印象,认为这些千奇百怪的矩阵乘法形态就是“奇技淫巧”。这是极其错误的想法!在不断学习中,大家会逐渐领略到每种矩阵乘法形态的力量所在。
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P55_1140068.jpg?sign=1738830142-4boiBJTllTRW1GoKpVsbFCHkVFvupuGk-0-edf810bec1fc89d2b5cb7f8e0e632c4d)
图2.9 矩阵乘法形态多样性
两个向量相乘
本节最后着重讲一下图2.9最上面两种向量的乘积。这两种特殊形态的矩阵乘法正是理解矩阵乘法规则的两个重要视角。
向量a和b为等长列向量,a转置(aT)乘b为标量,等价于a和b的标量积,即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P56_1140080.jpg?sign=1738830142-MhqebPrWJFCbZjRzf8IsU7A7XuWuify0-0-b554c5f885c818bf76206c6820a0abd3)
举个例子:
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P56_1140079.jpg?sign=1738830142-MV6awTwoQ4uZFHpaHXmZ3O84QnVMV0qv-0-bc7e3c70b49f9e985dce48ed1d3e071c)
列向量a乘b转置(bT),乘积结果abT为方阵,也就是行数和列数相同的矩阵,即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P56_1140078.jpg?sign=1738830142-Wv7BE2tVv0LOG4QDdI74rQAf9reloNAC-0-7766ca9b2c9f83801b3fb7cda9882d9e)
如果a和b分别为不等长列向量,请大家自行计算abT的结果:
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P56_1140077.jpg?sign=1738830142-tBRJEk2lTMy9swsZ0EvU6wTB333OF3IG-0-0aa6e5483ead2d4396ddeff6dc5ebcdc)
再次强调:使用numpy.array()构造向量时,np.array([1,2])构造的是一维数组,不能算是矩阵。而np.array([[1,2]])构造得到的相当于1×2行向量,是一个特殊矩阵。注意,《编程不难》专门区分数组、向量、矩阵等概念。
np.array([[1],[2]])构造的是一个2×1列向量,也是个矩阵。鸢尾花书会在《矩阵力量》一册介绍更多构造行向量和列向量的方法。