为什么numpy.dot是numpy.dot(a,b)的错误,但有numpy.dot(b,a)的输出?
我试图理解为什么numpy的点函数的行为是这样的:为什么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)有输出,而
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,)。