numpy.dot(a, b) 在具有相似维度的矩阵相乘时给出错误的结果
numpy.dot(a, b) gives wrong result on multiplication of matrices with similar dimenstions
设矩阵 a, b 为 [ 1, 2, 3, 4 ] 即 (1 x 4) 维。
在应用 numpy.dot(a, b) 时,结果是 30 而不是引发两个矩阵形状未对齐的异常。
(m x n) 矩阵如何与 (m x n) 矩阵相乘? numpy会自动转置一个矩阵对齐它们的形状然后相乘吗?
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)
returns 一个形状为 (m, p)
的数组,它是矩阵的结果
乘法。
由于a.T
的形状为(4, 1)
,而b
的形状为(1, 4)
,矩阵乘法的结果是一个形状为[=的数组21=].
由于a
的形状为(1, 4)
,而b.T
的形状为(4, 1)
,矩阵乘法的结果是一个形状为[=的数组26=].
np.dot(a, b)
引发 ValueError,因为形状为 (1, 4)
和 (1, 4)
的数组不能进行矩阵相乘。 NumPy 从不自动转置坐标轴。
设矩阵 a, b 为 [ 1, 2, 3, 4 ] 即 (1 x 4) 维。
在应用 numpy.dot(a, b) 时,结果是 30 而不是引发两个矩阵形状未对齐的异常。
(m x n) 矩阵如何与 (m x n) 矩阵相乘? numpy会自动转置一个矩阵对齐它们的形状然后相乘吗?
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)
returns 一个形状为 (m, p)
的数组,它是矩阵的结果
乘法。
由于
a.T
的形状为(4, 1)
,而b
的形状为(1, 4)
,矩阵乘法的结果是一个形状为[=的数组21=].由于
a
的形状为(1, 4)
,而b.T
的形状为(4, 1)
,矩阵乘法的结果是一个形状为[=的数组26=].np.dot(a, b)
引发 ValueError,因为形状为(1, 4)
和(1, 4)
的数组不能进行矩阵相乘。 NumPy 从不自动转置坐标轴。