令矩阵a,b为[1,2,3,4],即(1×4)维。
在应用numpy.dot(a,b)时,结果为30而不是引发异常,即两个矩阵形状都没有对齐。
如何将(m×n)矩阵乘以(m×n)矩阵? numpy会自动转换一个矩阵来对齐它们的形状然后相乘吗?
答案 0 :(得分:5)
In [59]: a = b = np.matrix([1,2,3,4])
In [60]: np.dot(a.T, b) # 1
Out[60]:
matrix([[ 1, 2, 3, 4],
[ 2, 4, 6, 8],
[ 3, 6, 9, 12],
[ 4, 8, 12, 16]])
In [63]: np.dot(a, b.T) # 2
Out[63]: matrix([[30]])
In [64]: np.dot(a, b) # 3
ValueError: shapes (1,4) and (1,4) not aligned: 4 (dim 1) != 1 (dim 0)
更一般地说,如果X
的形状为(m, n)
而Y
的形状为(n, p)
,那么np.dot(X,Y)
返回一个形状(m, p)
的数组,它是矩阵的结果
乘法。
由于a.T
的形状为(4, 1)
,而b
的形状为(1, 4)
,因此矩阵乘法的结果是形状(4, 4)
的数组。
由于a
的形状为(1, 4)
,而b.T
的形状为(4, 1)
,因此矩阵乘法的结果是形状(1, 1)
的数组。
np.dot(a, b)
会引发ValueError,因为形状(1, 4)
和(1, 4)
的数组不能进行矩阵相乘。 NumPy从不自动转置轴。