numpy.array .__ iadd__和重复索引

mrk*_*wjc 5 python numpy

我有一个数组:

A = np.array([0, 0, 0])
Run Code Online (Sandbox Code Playgroud)

和重复的索引列表:

idx = [0, 0, 1, 1, 2, 2]
Run Code Online (Sandbox Code Playgroud)

和另一个我希望使用上面的索引添加到A的数组:

B = np.array([1, 1, 1, 1, 1, 1])
Run Code Online (Sandbox Code Playgroud)

操作:

A[idx] += B
Run Code Online (Sandbox Code Playgroud)

给出结果:array([1, 1, 1])所以显然B没有总结出来的价值.获得结果的最佳方法是什么array([2, 2, 2])?我必须迭代索引吗?

jta*_*lor 18

对于这个numpy 1.8增加了at减少:

at(a,indices,b = None)

对'index'指定的元素在操作数'a'上执行无缓冲的就地操作.对于add ufunc,此方法等效于a[indices] += b,除了为多次索引的元素累积结果.例如,a[[0,0]] += 1由于缓冲只会增加第一个元素,而 add.at(a, [0,0], 1)第二个元素会增加两次.

.. versionadded :: 1.8.0

In [1]: A = np.array([0, 0, 0])
In [2]: B = np.array([1, 1, 1, 1, 1, 1])
In [3]: idx = [0, 0, 1, 1, 2, 2]
In [4]: np.add.at(A, idx, B)
In [5]: A
Out[5]: array([2, 2, 2])
Run Code Online (Sandbox Code Playgroud)