![数学要素(全彩图解 + 微课 + Python编程)](https://wfqqreader-1252317822.image.myqcloud.com/cover/748/52842748/b_52842748.jpg)
2.2 向量乘法:标量乘法、向量内积、逐项积
这一节介绍三种重要的向量乘法:①标量乘法(scalar multiplication);②向量内积(inner product);③逐项积(piecewise product)。
标量乘法
标量乘法运算中,标量乘向量的结果还是向量,相当于缩放。
标量乘法运算规则很简单,向量a乘以k,a的每一个元素均与k相乘,如下例标量2乘行向量[1, 2, 3]
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P50_1140013.jpg?sign=1738828719-pHwAdAOCpMjf0zJ6M6K7e67MUs0FPVug-0-06be77c56632ccd96d916e99da7552f7)
再如,标量乘列向量如
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P50_1140014.jpg?sign=1738828719-HFoxlCWFYY3dYY2CfTzxh45i0bYvdZ2z-0-33fd067046c2dc41e8f444c453c7d006)
图2.4所示为标量乘法示意图。
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P50_1140016.jpg?sign=1738828719-7swAG31a1Kodu5NdVHJfiv743Q1F94wB-0-0b9adcfc62fa8e67af2f6b90511cd8ee)
图2.4 标量乘法
同理,标量k乘矩阵A的结果是k与矩阵A每一个元素相乘,比如
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P50_1140017.jpg?sign=1738828719-ZU2ZIr6JwURoNl8l9ohXlRZFyUxIYGhc-0-7bf9925334ad3e174e9f36a30d73f0bb)
Bk3_Ch2_06.py完成向量和矩阵标量乘法。
向量内积
向量内积(inner product)的结果为标量。向量内积又叫标量积(scalar product)或点积(dot product)。
向量内积的运算规则是:两个形状相同的向量,对应位置元素一一相乘后再求和。比如,下例计算两个行向量内积
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P50_1140020.jpg?sign=1738828719-rRs7hUmu3MjxnWG9UgX4eZirHltaZ4EE-0-0f41fe326544582ca6339d78ab08fbb7)
计算两个列向量内积,比如:
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P51_1140026.jpg?sign=1738828719-Y3QGxZ6N2zTHGPVsj5qKuPCnFuQHOu0h-0-eada4c141c37b8d6f2c55873a725671f)
图2.5所示为向量内积规则的示意图。
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P51_1140028.jpg?sign=1738828719-pMIVhM5jXrtgOASLbu9Jdu1h3sHe2Wnb-0-698be3685435632a81b243d9e521cdcc)
图2.5 向量内积示意图
显然,向量内积满足交换律(commutative),即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P51_1140032.jpg?sign=1738828719-UTAnjTtzaDEdsdA2zatJGJurIf7J4PLk-0-6643f654b5ffce35aac78b4a5984ca55)
向量内积对向量加法满足分配律(distributive over vector addition),即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P51_1140036.jpg?sign=1738828719-aDhe84rHvuLmOvZ0bOUBNUOJUyAcXWad-0-2dc64e3eb2b4eae3e8b682cd95421bff)
显然,向量内积不满足结合律(associative),即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P51_1140037.jpg?sign=1738828719-fcaVcEkJUOpnrzyqCKELixZ2dQWXd1AX-0-07fb78cdd91853af1972f8e70d70a6b4)
Bk3_Ch2_07.py代码用numpy.inner()计算行向量的内积;但是,numpy.inner()函数输入为两个列向量时得到的结果为张量积(tensor product)。
机器学习和深度学习中,张量积是非常重要的向量运算,鸢尾花书将在《矩阵力量》一册中进行详细介绍。
下面举几个例子,让大家管窥标量积的用途。
给定以下五个数字,即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P51_1140043.jpg?sign=1738828719-XnWN7PT5MpVssQYQu7OYeCqBh0vo8QFE-0-0779345cc8859e6e55645e5d9e86da85)
这五个数字求和,可以用标量积计算得到,即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P51_1140024.jpg?sign=1738828719-jRnwJz3QSkzgLghpq85YBjcnYvYqWO4b-0-f03c8d43576eebe9bfd96471c4bf7aaf)
前文提过,[1, 1, 1, 1, 1]T叫作全1向量。
这五个数字的平均值,也可以通过标量积得到,即
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P51_1140025.jpg?sign=1738828719-FeD6MQ6R6HKZbWId34D7mH4hPywn4Tu8-0-dc6faa4efd945aed6cef46ec618a5169)
计算五个数字的平方和,有
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P52_1140046.jpg?sign=1738828719-Doi8EWwJnYGRSbzKwWa21UwrReYn6lv9-0-3487505160757118b4033dcbad4655d8)
此外,标量积还有重要的几何意义。本书后续将介绍这方面内容。
逐项积
逐项积(piecewise product),也叫阿达玛乘积(hadamard product)。两个相同形状向量的逐项积为对应位置元素分别相乘,结果为相同形状的向量。
逐项积的运算符为⊙。逐项积相当于算术乘法的批量运算。
举个例子,两个行向量逐项积如
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P52_1140052.jpg?sign=1738828719-4tSmcwYubqM337dowga52DVCPQqB6eif-0-9d20cf219e0fb347e999c357bd389742)
图2.6所示为向量逐项积运算示意图。
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P52_1140053.jpg?sign=1738828719-S6kfTr3Kxh9rOKuFYgL8jgSR2IobvxW1-0-dd88a59d566b142431ba288cca797676)
图2.6 向量逐项积
同理,两个矩阵逐项积的运算前提是——矩阵形状相同。矩阵逐项积运算规则为对应元素相乘,结果形状不变,如
![](https://epubservercos.yuewen.com/76631A/31398337104755406/epubprivate/OEBPS/Images/Figure-P52_1140054.jpg?sign=1738828719-F7drfKKISEbrOF0k33XrIZ2vIyB2oRxy-0-bcdac4ab1ed8f50a32306a5e6c48e292)
Python中,对于numpy.array()定义的形状相同的向量或矩阵,逐项积可以通过*计算得到。请大家参考Bk3_Ch2_08.py。更多有关NumPy用法,请参考《编程不难》。