![机器学习数学基础](https://wfqqreader-1252317822.image.myqcloud.com/cover/482/43738482/b_43738482.jpg)
2.1.5 矩阵乘法
矩阵乘法是指两个矩阵相乘——请区别于2.1.4节中的数量乘法,其定义为:
定义 矩阵和矩阵
相乘,记作:
,其中
,
。
例如:,根据定义,计算
和
。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_175.jpg?sign=1738839850-mo6cCiwofiieORJbTW5yxFFL2V5f5kYo-0-b57d1ed35f0102965d7998e56c0af6bb)
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_176.jpg?sign=1738839850-WSskWsoxO57bYYzJXFYbVrqXo3y3Gbgq-0-e5b789cc59bdd6715acaf8ae9b3dbed8)
显然,交换律不适用于矩阵乘法。
并且,矩阵乘法并非两个矩阵的对应元素相乘——为什么不固定为对应元素相乘?这样不更简单吗?这个问题,会在2.2节揭晓。不过,这里提醒读者注意,如果用NumPy中的数组表示矩阵,那么在使用乘法符号“*”计算乘法的时候,就会对应元素相乘,而且要求相乘的两个数组形状一样——这其实是数组相乘。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_178.jpg?sign=1738839850-s8FANLsiBee1v7aWSSuBbSw8dWCO4R76-0-237828868b32c723aa02635474aabd75)
在第1章1.4.2节介绍向量的点积运算时,提到了一个函数np.dot(),如果用二维数组表示矩阵,则通过这个函数所实现的乘法与矩阵乘法的定义相同。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_179.jpg?sign=1738839850-0oMXoiBK59cDGezFQeMh8xyK4ZebQ1bT-0-66c62f9054b26fbc480e17d334a8951c)
比较直接的方法是创建矩阵对象,在矩阵对象之间使用乘法符号“*”进行计算,即本节所探讨的矩阵乘法。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_180.jpg?sign=1738839850-U8T1UhV8Q1XZ4pD5BWuevVAzncXPa6TP-0-e53341edaaa5ed1b13770afbdccdddbd)
在矩阵乘法定义中,对两个矩阵的形状也做出了规定,并非任意形状的两个矩阵都能相乘,如图2-1-2所示。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_181.jpg?sign=1738839850-JvFyXDMN0VREnpKaWjEsO57fbLcPO8GS-0-aaf01ba5da7b6e6a9829dacaffd0a840)
图2-1-2
下面换个角度,尝试用列向量来理解矩阵乘法的计算过程。
性质 假设矩阵和矩阵
,矩阵
的列分别用
表示,即
,则:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_187.jpg?sign=1738839850-b50oAUOQpmjf1H5qSRfrudWZ9EclJCWD-0-fbb983593fe119d37b17ed68e872da72)
例如:,按照上述方式计算,得:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_189.jpg?sign=1738839850-BnDvYtGXINsf9oD0Udqd5sB0iwkCJF02-0-86d4aa1569efa91d1989629ef9b82e60)
若是
的矩阵(列向量),
,则:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_193.jpg?sign=1738839850-jVnHVHDas7VO2gVVcH6LqsP4RUj2ejdF-0-f95ab5304f1ffe0cad4d8bb677f86b70)
其中是矩阵
的列向量。
例如:,按照上述方式计算,得:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_197.jpg?sign=1738839850-IKcEolNM7GwyLpymWIPSPeUXrrGI3ODN-0-93ed90ce5c980c230a4197b9d9f878c3)
这说明,如果一个矩阵与列向量相乘,那么可以认为是矩阵每列的线性组合,或者说将列向量转换为以矩阵的列为基的向量。
下面总结了矩阵运算的性质,其中大写粗斜体字母表示矩阵,小写字母表示标量。
性质 加法和数量乘法:
●
●
● ,
代表零矩阵(矩阵的元素都是
)
●
●
●
矩阵乘法:
●
●
●
● ,
是单位矩阵
●
● 注意:
代数中的一些运算性质,不能随意套用到矩阵运算中,特别是与矩阵乘法相关的运算。例如:
●
●
上述在数量乘法中显然成立的结论,对矩阵乘法不一定都成立。
● ,计算显示:
,但
● ,计算显示:
,但
。
也有类似的,例如指数运算(仅限于方阵)。
性质 设,则:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_222.jpg?sign=1738839850-tPrRdR1G0ejyKcG7HHQJoFpBnAAStVlM-0-da59d0a1d291a11c1ff788414616ea1a)
例如:,计算
。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_225.jpg?sign=1738839850-r4Z2hWo9PR1HavpdPplnBWI6MvBp7blO-0-53f5e774a1811e10ac8409cb262e7604)
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_226.jpg?sign=1738839850-W61DRrrE3uXRp6k20WDmJG7DfHgpc5Bz-0-f8a91c16b01b1a2f3c5aa05442727d7d)
矩阵的指数运算,还有如下性质:
性质 矩阵是
的方阵,
是大于
的正整数:
●
●
● 规定:
在NumPy中有一个进行指数运算的函数np.power(),但它不能实现以上所说的矩阵指数运算。
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_234.jpg?sign=1738839850-hMMZ5ZqQ7Gqosm3gfAziQvnGTCO859uT-0-ff4b34636c96affb2c494fe7269664b2)
从输出结果中可以看出,np.power()计算了矩阵中每个元素计算的4次方,这不符合矩阵的指数运算法则。其实np.power()函数,是对NumPy中数组进行指数运算的函数,如果进行矩阵指数运算,则应该这样做:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_235.jpg?sign=1738839850-bpjcJrlt4aLwECvHUCtibWjtJ81oHe6L-0-6d9387b1ccd19ef9c57c19a7f741eeeb)
此外,还可以使用运算符**:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_236.jpg?sign=1738839850-bG3Snzp18VipfZp2bJjwJkkwogGW3u1W-0-4ca96f54b64a57d3f2e29f9a892b755e)
在计算中,要注意区分二维数组和矩阵对象,以及所用函数,是否按照矩阵运算规则完成相应计算。
曾记否,在2.1.2节提到了初等变换和初等矩阵的概念,现在从矩阵乘法的角度,来看一看这两个概念之间的关系。
设矩阵,进行初等行变换,
,得:
。
换一个角度来看一看初等变换的过程。如果用单位矩阵左乘上面的矩阵,即:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_241.jpg?sign=1738839850-PPaTtFqXA5hC92MdKCzJKcOhm0b4RW3s-0-5ad8fd3bdd8b5342020129f9cf1f9c8d)
除了左乘,还可以检测右乘,这就是前面的乘法运算性质中提到的,单位矩阵左(右)乘任何一个矩阵,结果都是该矩阵。
由单位矩阵经过一次初等行(列)变换得到了初等矩阵,例如也是第二行加上第一行(与刚才进行的初等行变换一致):
,然后用这个初等矩阵左乘矩阵
:
![](https://epubservercos.yuewen.com/39156C/23020656909779806/epubprivate/OEBPS/Images/txt002_246.jpg?sign=1738839850-VnAj7pJMYUleiNxcDKB6IuOO2vA1W3HL-0-32334ee32030dfc1965b5a3346bb9c4e)
读者可以自行验证,如果要实现矩阵的初等列变换,则可以通过右乘一个初等矩阵实现。由此总结如下:
性质 初等行(列)变换相当于左(右)乘相应的初等矩阵。
如此,就将矩阵乘法和初等变换联系起来了。