numpy.array .__ iadd__和重复的索引

我有一个数组:

A = np.array([0, 0, 0]) 

和重复索引列表:

 idx = [0, 0, 1, 1, 2, 2] 

另一个数组我想用上面的索引添加到A:

 B = np.array([1, 1, 1, 1, 1, 1]) 

操作:

 A[idx] += B 

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

为这个numpy 1.8添加了减less:

(a,指数,b =无)

对由'indices'指定的元素的操作数'a'执行无缓冲的就地操作。 对于另外的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]) 

怎么样:

 A = np.array([1, 2, 3]) idx = [0, 0, 1, 1, 2, 2] A += np.bincount(idx, minlength=len(A)) 

如果A开始为零,显然更简单:

 A = np.bincount(idx)