本文通过例子,对matrix/array格式的乘积运算进行总结。
m,n=np.array([1,2]),np.array([2,3])
a,b=np.mat([1,2]),np.mat([2,3])
m*n
Out: array([2, 6])
a*b
Out: ValueError: shapes (1,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
a*b.T
Out: matrix([[8]])
在matrix格式,*出现了维度不匹配的问题,这是因为二者与我们通常理解的矩阵乘法是一致的。因此需要使用转置来解决。np.dot()也有类似情况,不再细述。
np.dot(m,n)
Out: 8
np.dot(a,b.T)
Out: matrix([[8]])
np.multiply(m,n)
Out: array([2, 6])
np.multiply(a,b)
Out: matrix([[2, 6]])
以二维为例:
m,n=np.array([[1,2],[2,3]]),np.array([[1,0],[2,1]])
a,b=np.mat([[1,2],[2,3]]),np.mat([[1,0],[2,1]])
m*n
Out:
array([[1, 0],
[4, 3]])
a*b
Out:
matrix([[5, 2],
[8, 3]])
np.dot(m,n)
Out:
array([[5, 2],
[8, 3]])
np.dot(a,b)
Out:
matrix([[5, 2],
[8, 3]])
np.multiply(m,n)
Out:
array([[1, 0],
[4, 3]])
np.multiply(a,b)
Out:
matrix([[1, 0],
[4, 3]])
可见对于多维数组,np.dot()和np.multiply()运算结果在数值上是相同的。
总结如下:
类型/运算 | * | np.dot() | np.multiply() |
---|---|---|---|
一维np.array | 对应位置元素相乘 | 内积形式 | 对应位置元素相乘 |
一维np.mat | 通常理解的矩阵乘法 | 通常理解的矩阵乘法 | 对应位置元素相乘 |
多维np.array | 对应位置元素相乘 | 通常理解的矩阵乘法 | 对应位置元素相乘 |
多维np.mat | 通常理解的矩阵乘法 | 通常理解的矩阵乘法 | 对应位置元素相乘 |