numpy.array .__ iadd__和重复索引

时间:2014-06-07 16:42:48

标签: python numpy

我有一个数组:

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]),所以显然B的值不会被总结。结果array([2, 2, 2])的最佳方式是什么?我是否必须迭代索引?

2 个答案:

答案 0 :(得分:17)

对于这个numpy 1.8添加了at缩减:

  

at(a,indices,b = None)

     

在操作数上执行无缓冲的就地操作' 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])

答案 1 :(得分:0)

怎么样:

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

显然,如果A以0开始,则更简单:

A = np.bincount(idx)