在关于广播规则的文件中,指出在以下任一情况下,两个维度是兼容的:它们相等或其中之一是1通过显示的一些示例,这一点变得很清楚,例如:A (4d array): 8 x 1 x 6 x 1B (3d array): 7 x 1 x 5Result (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 上的最后一个轴进行检查?
1 回答
弑天下
TA贡献1818条经验 获得超8个赞
这背后的原因是,当涉及到广播规则时,1d数组被视为列向量,因此沿着2d数组上的第二个轴检查形状兼容性?
相反,它们被视为行向量并垂直堆叠。您可以在相关文章中的此图中看到它。
在您演示的情况下,您可以执行相同的草图:
A 3 x 2 # np.ones((3, 2))
B 2 x 3 # np.ones((2, 3))
C 3 # np.arange(3)
这里不起作用,但确实如此。这是因为沿第一个维度(即行)重复。您可以将缺失的尺寸想象为通过复制后面的尺寸来“调整大小”A*CB*CC
添加回答
举报
0/150
提交
取消