繁体   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