您的位置:首页 > 编程语言 > Python开发

<Python> Numpy中的矩阵乘法问题

2017-07-27 22:48 232 查看
最近参加的一个Program,主题是生物识别,其中的PCA/LDA特征值提取部分需要大量用到线性代数矩阵论的知识,但是稍不注意numpy中的乘法规则就很容易得到错误的结果,最终导致后续结果的崩盘,尤其是较大规模的矩阵,更是很难发现错误。

Numpy中的矩阵乘法分为两大情况,
使用numpy.array
和使用
numpy.matrix
. Numpy确实重载了
*
操作符,可以直接对
array
或者
matrix
对象进行乘法运算,但是在不同对象上,其意义是有区别的。

对于array对象

*(或者multiply)
代表的是并不是矩阵的乘法规则,而是简单的数量积,即对应位置元素相乘后的积相加。

import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[4,3],[2,1]])


运行结果如下:



如果在
array
对象上要进行严格的矩阵乘法,即矢量乘法,则必须使用.dot()或者.matmul()函数,两者是等效的,我们可以通过查阅官网文档得知。

numpy.dot



numpy.matmul



现在可以在IDLE上验证结果:



可以看到两者的运行结果一致,都是矩阵的矢量积结果。

对于matrix对象

对于
matrix
,情况就悄悄相反了。

*
表示的是矢量积,如果希望以数量积方式运行,则必须使用
np.multiply
函数
。因为
*
重载矩阵运算规则只限于
matrix
对象。

在IDLE中重新验证:



结果已经非常清晰了。

总结一下:

对于
array
对象,
*
np.multiply
函数代表的是数量积,如果希望使用矩阵的乘法规则,则应该调用
np.dot
np.matmul
函数。

对于
matrix
对象,
*
直接代表了原生的矩阵乘法,而如果特殊情况下需要使用数量积,则应该使用
np.multiply
函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python numpy matrix