为什么numpy.dot是numpy.dot(a,b)的错误,但有numpy.dot(b,a)的输出?

时间:2016-10-01 10:42:11

标签: numpy

我试图理解为什么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]

感谢。

1 个答案:

答案 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,)