假设我们有三个1-D阵列:
C
最初填充零。 A
为C
元素提供了应该更改的索引(它们可能会重复),而B
会给出应该添加到C
的初始零的值。例如,如果A = [1, 3, 3, 3, 29]
和B = [2, 3, 4, 2, 3]
,则C[1]
应为2,C[3] - 9
,C[29] - 3
;所有其他C
元素应保持为0。
我把它写成for-loop:
for i in range(len(A) - 1):
C[A[i]] = C[A[i]] + B[i]
但是,在矢量形式的numpy
中有更有效的方法吗?
答案 0 :(得分:3)
我认为你或许可以使用bincount
,至少对于1-D案例:
>>> A = np.array([1,3,3,3,29])
>>> B = np.array([2,3,4,2,3])
>>> np.bincount(A, B)
array([ 0., 2., 0., 9., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,
0., 0., 0., 3.])
(旁白:使用numpy
索引时重复的值可能会非常奇怪,并且很容易被你在简单情况下看到的行为误导。我完全避免它们,因为行为几乎从不是什么我想要。)