Numpy中的矩阵乘法分为两大情况,使用
numpy.array
和使用numpy.matrix
. Numpy确实重载了*
操作符,可以直接对array或者matrix对象进行乘法运算,但是在不同对象上,其意义是有区别的。
*(或multiply)
代表的是并不是矩阵的乘法规则,而是简单的数量积,即对应位置元素相乘后的积相加。
import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[1,2],[3,4]])
print(a*b)
#[[ 1 4]
#[ 9 16]]
如果在array
对象上要进行严格的矩阵乘法,即矢量乘法,则必须使用.dot()
或者.matmul()
函数,两者是等效的。
import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[1,2],[3,4]])
print(np.dot(a,b))
print(np.matmul(a,b))
# [[ 7 10]
# [15 22]]
# [[ 7 10]
# [15 22]]
对于matrix
,情况就悄悄相反了。
*
表示的是矢量积,如果希望以数量积方式运行,则必须使用np.multiply
函数。因为*
重载矩阵运算规则只限于matrix对象。
import numpy as np
x=np.mat('1 2;3 4')
y=np.mat('1 2;3 4')
print(x*y)
print(np.multiply(x,y))
# [[ 7 10]
# [15 22]]
# [[ 1 4]
# [ 9 16]]
1、对于
array
对象,*
和np.multiply
函数代表的是数量积,如果希望使用矩阵的乘法规则,则应该调用np.dot
和np.matmul
函数。
2、对于matrix
对象,*
直接代表了原生的矩阵乘法,而如果特殊情况下需要使用数量积,则应该使用np.multiply
函数。