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

为什么numpy.dot是numpy.dot(a,b)的错误,但有numpy.dot(b,a)的输出?,numpy,Numpy,我试图理解为什么numpy的点函数的行为是这样的: t1 = np.array( [1, 0] ) t2 = np.array( [ [7,6], [7,6], [7,6], [7,6]] ) np.点(t1,t2)是错误的,因为矩阵乘法错误: ValueError:形状(2,)和(4,2)未对齐:2(尺寸0)!=4(尺寸0) 这是对的。我能理解。但是为什么np.dot(t2,t1)有输出,而

我试图理解为什么numpy的点函数的行为是这样的:

t1 = np.array( [1, 0] )
t2 = np.array( [ [7,6],
                 [7,6],
                 [7,6],
                 [7,6]] )
np.点(t1,t2)是错误的,因为矩阵乘法错误:

ValueError:形状(2,)和(4,2)未对齐:2(尺寸0)!=4(尺寸0)

这是对的。我能理解。但是为什么np.dot(t2,t1)有输出,而不是np.dot(t1,t2)有相同的故障?参数的不同顺序有不同的解释

[7]

谢谢。

请参考:

函数引发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,)是一个维度

对于1D和2D阵列,
np.dot
的行为有所不同(不同于:

对于二维数组,它等价于矩阵乘法;对于一维数组,它等价于矩阵乘法 向量内积的数组

这就是得到不同结果的原因,因为您混合了一维和二维阵列。由于
t2
是二维数组,
np.dot(b,a)
尝试矩阵乘法,
np.dot(a,b)
尝试内积,但失败

在矩阵乘法的情况下(请参阅):第二个参数是1-D,通过在其维度上附加1将其提升为矩阵。矩阵相乘后,删除附加的1。简单地说,t2形状是(4,2),t1形状是(2,)。t1为1D,t1的形状转换为(2,1),矩阵相乘后1被移除。因此,若您将存储点积的输出,则可以检查形状是否为(4,)

请参阅:

函数引发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,)是一个维度

对于1D和2D阵列,
np.dot
的行为有所不同(不同于:

对于二维数组,它等价于矩阵乘法;对于一维数组,它等价于矩阵乘法 向量内积的数组

这就是得到不同结果的原因,因为您混合了一维和二维阵列。由于
t2
是二维数组,
np.dot(b,a)
尝试矩阵乘法,
np.dot(a,b)
尝试内积,但失败

在矩阵乘法的情况下(请参阅):第二个参数是1-D,通过在其维度上附加1将其提升为矩阵。矩阵相乘后,删除附加的1。简单地说,t2形状是(4,2),t1形状是(2,)。t1为1D,t1的形状转换为(2,1),矩阵相乘后1被移除。因此,若您将存储点积的输出,则可以检查形状是否为(4,)


你似乎不明白我的问题。为什么不同的参数顺序会有不同的解释?根据定义,矩阵乘法不是可交换的。谢谢@Sayali Sonawane。点(t1,t2)是一维数组与二维数组的乘积。失败的是矩阵乘法。这是对的,;点(t2,t1)是二维数组(4*2)与一维数组(1*2)的乘积。这并没有失败。为什么?如果1D数组与2D数组相乘,则1D数组将始终被numpy自动视为列向量?在矩阵相乘的情况下:第二个参数是1-D,通过在其维度上附加1将其提升为矩阵。矩阵相乘后,删除附加的1。简单地说,t2形状是(4,2),t1形状是(2,)。t1为1D,t1的形状转换为(2,1),矩阵相乘后1被移除。所以,若你们要存储点积的输出,你们可以检查形状是否为(4,)。你们似乎不明白我的问题。为什么不同的参数顺序会有不同的解释?根据定义,矩阵乘法不是可交换的。谢谢@Sayali Sonawane。点(t1,t2)是一维数组与二维数组的乘积。失败的是矩阵乘法。这是对的,;点(t2,t1)是二维数组(4*2)与一维数组(1*2)的乘积。这并没有失败。为什么?如果1D数组与2D数组相乘,则1D数组将始终被numpy自动视为列向量?在矩阵相乘的情况下:第二个参数是1-D,通过在其维度上附加1将其提升为矩阵。矩阵相乘后,删除附加的1。简单地说,t2形状是(4,2),t1形状是(2,)。t1为1D,t1的形状转换为(2,1),矩阵相乘后1被移除。因此,若您将存储点积的输出,则可以检查形状是否为(4,)。