在广播方面被视为列向量的Numpy 1D数组

在关于广播规则的文件中,指出在以下任一情况下,两个维度是兼容的:


它们相等或

其中之一是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 上的最后一个轴进行检查?


湖上湖
浏览 77回答 1
1回答

弑天下

这背后的原因是,当涉及到广播规则时,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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python