Numpy中的矩阵乘法分为两大情况,使用numpy.array和使用numpy.matrix.
Numpy重载了*操作符,可以直接对array或者matrix对象进行乘法运算,但是在不同对象上,其意义是有区别的。
对于array对象
*(或者multiply)代表的是并不是矩阵的乘法规则,而是简单的数量积,即对应位置元素相乘后的积相加。
验证结果如下:
import numpy as np |
如果在array对象上要进行严格的矩阵乘法,即矢量乘法,则必须使用.dot()或者.matmul()函数,两者是等效的,我们可以通过查阅官网文档得知。
在IDLE上运行结果如下:
np.dot( a, b) |
可以看到两者的运行结果一致,都是矩阵的矢量积结果。
对于matrix对象
对于matrix,情况就恰恰相反了。* 表示的是矢量积,如果希望以数量积方式运行,则必须使用np.multiply函数。因为*重载矩阵运算规则只限于matrix对象。 在IDLE中验证如下:
1,2],[3,4]]) a = np.matrix([[ |
总结
- 对于array对象,*和np.multiply函数代表的是数量积,如果希望使用矩阵的乘法规则,则应该调用np.dot和np.matmul函数。
- 对于matrix对象,*直接代表了原生的矩阵乘法,而如果特殊情况下需要使用数量积,则应该使用np.multiply函数。
- 对于array对象,在需要矩阵乘法的时候,也利用np.asmatrix转换成matrix对象