使用带有冗余元素的python数组索引python数组

fig*_*war 4 python arrays indexing numpy scipy

我遇到了数组索引的问题.假设您有一个数组a和另一个要用作a的索引的数组b,以便为b元素指向的位置分配一些值.

a=numpy.zeros(5)
print a

[ 0.  0.  0.  0.  0.]
Run Code Online (Sandbox Code Playgroud)

现在我想两次增加第二个元素

b=numpy.array([1,1])
a[b]+=1.
print a

[ 0.  1.  0.  0.  0.]
Run Code Online (Sandbox Code Playgroud)

虽然我期望有

[ 0.  2.  0.  0.  0.] 
Run Code Online (Sandbox Code Playgroud)

如果阵列b没有冗余(其元素的所有值都不同),则没有问题.有人为这样的问题找到了解决方案,避免使用for循环吗?这是一个numpy的错误吗?提前致谢

Fer*_*yer 7

当您使用整数数组索引另一个数组时,NumPy无法创建足够的视图,因为生成的数组可能无法用步幅表示.因此,它将返回一份副本:

>>> a = np.zeros(5)
>>> b = np.array([1, 1])
>>> c = a[b]
>>> c
array([ 0.,  0.])
>>> c.base is a
False
Run Code Online (Sandbox Code Playgroud)

当使用此索引与就地操作一样时+=,NumPy将以不同于您期望的方式解释它.它不是"遍历索引数组并依次对每个元素执行操作",而是首先选择所有索引的值b(在这种情况下,只是一个带索引的元素1),然后对这些元素执行一次操作.