2017-09-08 30 views
-1

假設你有下面的代碼NumPy的高級索引:同一指數多次使用的+ =

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

看看'np.add.at'。 – Divakar

+0

謝謝,這似乎在做伎倆:) – diningphil

+0

@Divakar如果你想寫一個答案,我會刪除我的社區維基。 –

回答

1

使用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.]) 

請注意,該函數就地工作。