Numpy高级索引:相同的索引在+ =中多次使用

时间:2017-09-08 10:26:12

标签: python arrays numpy matrix indexing

假设您有以下代码

a = np.ones(8)
pos = np.array([1, 3, 5, 3])

a[pos] # returns array([ 1.,  1.,  1.,  1.]), where the 2nd and 4th el are the same
a[pos] +=1 

最后一条指令返回

array([ 1.,  2.,  1.,  2.,  1.,  2.,  1.,  1.])

但是我希望总结相同指数上的作业,以便获得

array([ 1.,  2.,  1.,  3.,  1.,  2.,  1.,  1.])

有人已经遇到过同样的情况吗?

1 个答案:

答案 0 :(得分:3)

使用np.add.at

  

对元素的操作数a执行无缓冲的就地操作   由indices指定。对于加法ufunc,此方法是等效的   到a[indices] += b,除了为元素累积结果   被索引不止一次。

np.add.at(a, pos, 1)

print(a)
array([ 1.,  2.,  1.,  3.,  1.,  2.,  1.,  1.])

请注意该功能可以就地工作。