【发布时间】:2019-01-16 20:03:46
【问题描述】:
想知道这个 numpy 输出背后的逻辑是什么。基本上,我正在尝试通过使用以下代码切片来将 numpy 数组的子集添加到自身。
x = np.zeros((10,))
x[:3] += 1
print x
x[2:] += x[:-2]
print x
原x:
[ 1. 1. 1. 0. 0. 0. 0. 0. 0. 0.]
预期输出:
[ 1. 1. 2. 1. 1. 0. 0. 0. 0. 0.]
但是它返回了以下结果,这是完全出乎意料的。有人知道这里的逻辑是什么吗?
实际输出:
[ 1. 1. 2. 1. 2. 1. 2. 1. 2. 1.]
编辑:问题似乎特定于 numpy 1.11.3。在 numpy 1.15.4 的环境中再次尝试,它返回了预期的输出。
【问题讨论】:
-
具有自身视图的数组的赋值数学运算符可能无法按预期工作。查看可能重复的 Unexpected result with += on NumPy arrays(
x[2:] = x[2:] + x[:-2]或x[2:] += x[:-2].copy()应该可以可靠地工作)。