簡體   English   中英

對索引數組中重復條目的 Numpy 求和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM