我试图理解为什么numpy的点函数表现得像:
t1 = np.array( [1, 0] )
t2 = np.array( [ [7,6],
[7,6],
[7,6],
[7,6]] )
np.dot(t1,t2)由于错误的矩阵乘法而出错:
ValueError:形状(2,)和(4,2)未对齐:2(暗淡0)!= 4(暗淡0)
这是对的。我能理解。但为什么 np.dot(t2,t1)输出而不是 np.dot(t1,t2)的相同错误?不同的参数顺序的解释方式不同。
[7 7 7 7]
感谢。
答案 0 :(得分:2)
请参阅documentation:
函数引发ValueError:
如果a的最后一个维度与b的倒数第二个维度的大小不同。
请注意,您不仅使用1D数组:
In [6]: t1.ndim
Out[6]: 1
In [7]: t2.ndim
Out[7]: 2
因此,t2
是一个2D数组。
您还在t2.shape
的输出中看到了这一点:(4,2)表示两个维度为(2,)是一维。
{1}和2D阵列的np.dot
行为不同(来自docs):
对于二维阵列,它相当于矩阵乘法,对于1-D 数组到向量的内积
这就是你得到不同结果的原因,因为你正在混合1D和2D数组。由于t2
是一个二维数组,np.dot(b, a)
尝试矩阵乘法,而np.dot(a, b)
尝试内部产品,这会失败。
在矩阵乘法的情况下(参考docs):第二个参数是1-D,它通过在其维度上附加1来提升为矩阵。在矩阵乘法之后,移除附加的1。简单来说,t2形状是(4,2),t1形状是(2,)。 t1为1D,t1的形状转换为(2,1),并且去除矩阵乘法1之后。因此,如果你将存储点积的输出,你可以检查形状将是(4,)。
t = np.dot(t2,t1)
t.shape
t.shape
Out[57]: (4,)