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