为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

湖上湖 2022-08-02 17:33:38
在关于广播规则的文件中,指出在以下任一情况下,两个维度是兼容的:它们相等或其中之一是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


查看完整回答
反对 回复 2022-08-02
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信