有效地添加具有重复目标索引的numpy数组

时间:2017-11-20 06:47:30

标签: python arrays numpy

假设我有两个numpy数组,AB,它们可能非常大。我想通过指定应添加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] += 1A[1] += 5A[2] += 2

注意:我将所需的行为视为与SQL中的“group by”操作有些类似 - 对于k的每个值,我想将B的所有条目分组到indices == k 1}}并将它们添加到k的{​​{1}}位置。

我的问题是:是否有更有效的方法来执行此操作?我希望有一些内置的numpy功能可以比上面的for-loop更好地优化性能

供参考,我使用的是numpy版本1.13.3。

高维案例

如果可以将其推广到更高维数组,我也有兴趣听到这个。例如,是否有更有效的方法来执行以下操作?

A

0 个答案:

没有答案