在关于广播规则的文件中,指出在以下任一情况下,两个维度是兼容的:
它们相等或
其中之一是1
通过显示的一些示例,这一点变得很清楚,例如:
A (4d array): 8 x 1 x 6 x 1
B (3d array): 7 x 1 x 5
Result (4d array): 8 x 7 x 6 x 5
这似乎很清楚。但是,我无法找到一个具体的例子/解释,为什么当1d数组的形状与2d数组的第二轴的形状兼容时,1D数组只能用2d数组广播。例如:
np.ones((2,3)) * np.arange(3)
array([[0., 1., 2.],
[0., 1., 2.]])
正如预期的那样,1d arange已跨行广播。但是,如果我们这样做:
np.ones((3, 2)) * np.arange(3)
值错误: 操作数不能与形状一起广播 (3,2) (3,)
我们收到不兼容形状的错误。这可能很简单,但我只想知道哪个是正确的解释。这背后的原因是,当涉及到广播规则时,1d数组被视为列向量,因此沿着2d数组上的第二个轴检查形状兼容性?对于较大的阵列,是否始终根据较大 ndarray 上的最后一个轴进行检查?
弑天下
相关分类