数组结束后出现奇怪的奇怪行为

Mad*_*ist 10 python indexing numpy slice

通常,如果您尝试在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)
Run Code Online (Sandbox Code Playgroud)

但是,如果仅分配了一个元素,则完全在数组“成功”之后执行相同的操作:

>>> x[5:] = np.arange(5)[4:]
>>> x[5:] = np.arange(5)[4:100]
Run Code Online (Sandbox Code Playgroud)

仅在RHS具有以下要素的情况下才有效:

>>> 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)
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?如何在这里不出错?是否已记录此行为,或者是错误?

hpa*_*ulj 5

为了与Python列表行为保持一致,您可以在末端进行切片。第一种情况表明,对于LHS和RHS都是如此。

其余正在广播。3不能进入2。2不能进入0。但是1可以进入任何事物,包括0。我们倾向于考虑广播将大小为1的维复制到更大的对象,但是复制为0也可以。