假设我有两个numpy数组,A
和B
,它们可能非常大。我想通过指定应添加A
的每个条目的索引,找到有效向B
中的某些条目添加值的方法。
通常,可以使用以下语法:
A[indices] += B
问题是,在indices
包含重复值的情况下,这不会像我预期的那样。我发现的唯一解决方案是使用手动for循环,但我希望可能有更有效的方法。例如:
A = np.array([100, 200, 300, 400])
B = np.array([1, 2, 3, 4, 5, 6])
indices = [1, 2, 0, 2, 1, 1]
for i, index in enumerate(indices):
A[index] += B[i]
根据需要,这会产生A = [103, 212, 306, 400]
。
相反,A[indices] += B
会产生A = [103, 206, 304, 400]
,这表示正在省略操作A[1] += 1
,A[1] += 5
,A[2] += 2
。
注意:我将所需的行为视为与SQL中的“group by”操作有些类似 - 对于k
的每个值,我想将B
的所有条目分组到indices == k
1}}并将它们添加到k
的{{1}}位置。
我的问题是:是否有更有效的方法来执行此操作?我希望有一些内置的numpy功能可以比上面的for-loop更好地优化性能
供参考,我使用的是numpy版本1.13.3。
如果可以将其推广到更高维数组,我也有兴趣听到这个。例如,是否有更有效的方法来执行以下操作?
A