![数学要素(全彩图解 + 微课 + 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=1739275868-CmNlzdxyVtIPkUtdStxh7IcB3gZKjC3m-0-c907ba9d2ecf45dd77461288b59e047f)
如图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=1739275868-FijFdC7ru5mhxZomd0Yiz7insehr0AJC-0-68fa5f0a16c1f3aaf6282e8a7cab708b)
图2.7 矩阵乘法规则
再次强调,矩阵乘法不满足交换律。也就是说,一般情况下下式不成立,即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P53_1140061.jpg?sign=1739275868-v8A01GvoBWK5vhdz76AWwv86LsfVscQ5-0-d0cadae8db02ba622e9a600e0b86f06d)
首先,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=1739275868-Zv1ptAxe31T0ByPbZ5jWOgqb5dcfK4Na-0-9a5ec168efac14d9cf9c5d1b32b2045c)
图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=1739275868-LW26vvZcC1ara0iZcMrYTnVYZ3M8JZsT-0-282ae07428b22fc4b4afa973a07f7aa5)
图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=1739275868-CfrH8a1Xc5jHzVP4y4i9cUXd1dp3qLjp-0-a2cb423860f1e330778e0b4ae5832560)
图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=1739275868-Ow8jWzjyVp4bVEvOiXmVD5YtgxGH9U96-0-07bed7866b3583e9285c0953734cfac7)
举个例子:
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P56_1140079.jpg?sign=1739275868-l0SIjWGNhr5CvLFf05fpHueSdAlzhWFK-0-01f7b92ed01655661ece9d04fbee6eb9)
列向量a乘b转置(bT),乘积结果abT为方阵,也就是行数和列数相同的矩阵,即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P56_1140078.jpg?sign=1739275868-KqaHACT7tsYbKdc0L15inMGWKWNTrtXo-0-58271d0c51fec038d04a78349a2c3762)
如果a和b分别为不等长列向量,请大家自行计算abT的结果:
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P56_1140077.jpg?sign=1739275868-ES06teEvx7PmCCEqY9epK2ZVPXzwSGk0-0-4f518e61e937818e6f6a1c10ef97600b)
再次强调:使用numpy.array()构造向量时,np.array([1,2])构造的是一维数组,不能算是矩阵。而np.array([[1,2]])构造得到的相当于1×2行向量,是一个特殊矩阵。注意,《编程不难》专门区分数组、向量、矩阵等概念。
np.array([[1],[2]])构造的是一个2×1列向量,也是个矩阵。鸢尾花书会在《矩阵力量》一册介绍更多构造行向量和列向量的方法。