NumPy 数组在结尾处的奇怪行为

10

通常情况下,在numpy中尝试分配超出数组末尾的位置时,不存在的元素会被忽略。

>>> x = np.zeros(5)
>>> x[3:6] = np.arange(5)[2:5]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (3) into shape (2)

然而,如果只有一个元素被分配,即使将操作完全超出数组的末尾,该操作也会“成功”:

>>> x[5:] = np.arange(5)[4:]
>>> x[5:] = np.arange(5)[4:100]

只有当右手边只有一个元素时,这个才会生效:

>>> x[5:] = np.arange(5)[3:]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not broadcast input array from shape (2) into shape (0)

为什么会这样?怎么可能不会出现错误?这种行为是否有文档记录,还是一个bug?

1个回答

6

与 Python 列表的行为一致,您可以切片-末尾。第一个示例展示了左右两侧都是如此。

其余部分是广播。 3 无法进入 2,2 无法进入 0。但是 1 可以进入任何位置,包括 0。我们倾向于认为广播将大小为 1 的维度复制到较大的维度,但是将其复制到 0 也可以工作。


这肯定解释了一切。我会认为这非常违背返回预期结果的整个思想,但那是完全不同的问题。 - Mad Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接