[英]Numpy sum over repeated entries in index array
給定 numpy ndarray A
和一個整數數組I
,形狀相同,具有最高值imax
和數組B = np.zeros(imax)
我們可以做B[I] = A
。 但是,如果I
重復輸入,則最后一次分配保持不變。 我需要在總結重復條目時執行此操作,例如
For i in range(A.size):
B[I.ravel()[i]] += A.ravel()[i]
在numpy
是否有一個很好的方法來做到這一點?
例如,我想要這種行為(但=
和+=
都不是這樣的)
A = np.array((1,2,5,9))
I = np.array((0,1,2,0),dtype=int)
B = np.zeros(3)
B[I] += A
print(B)
>>> array([10,2,5])
在這里,我們在第一個條目中看到1+9=10
。
In [1]: A = np.array((1,2,5,9))
...: I = np.array((0,1,2,0),dtype=int)
...: B = np.zeros(3)
...: B[I] += A
In [2]: B
Out[2]: array([9., 2., 5.])
這是一種緩沖解決方案,不同於迭代解決方案:
In [3]: B = np.zeros(3)
In [4]: for i,a in zip(I,A):
...: B[i] += a
...:
In [5]: B
Out[5]: array([10., 2., 5.])
使用ufunc.at
的無緩沖解決方案:
In [6]: B = np.zeros(3)
In [7]: np.add.at(B, I, A)
In [8]: B
Out[8]: array([10., 2., 5.])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.