小编典典

numpy.array .__ iadd__和重复的索引

python

我有一个数组:

A = np.array([0, 0, 0])

以及重复索引列表:

idx = [0, 0, 1, 1, 2, 2]

我想使用上面的索引添加到另一个数组:

B = np.array([1, 1, 1, 1, 1, 1])

操作:

A[idx] += B

给出结果:array([1, 1, 1]),因此显然B未对from中的值求和。结果最好的方法是什么array([2, 2, 2])?我是否必须遍历索引?


阅读 208

收藏
2020-12-20

共1个答案

小编典典

为此numpy 1.8增加了at减少:

at(a,索引,b =无)

对’indices’指定的元素在操作数’a’上执行无缓冲的就地操作。对于加法ufunc,此方法等效于a[indices] += b,不同之处在于对索引多次的元素累积结果。例如,a[[0,0]] += 1由于缓冲,将仅对第一个元素递增一次,而 add.at(a, [0,0], 1)对第一个元素将递增两次。

..版本添加:: 1.8.0

In [1]: A = np.array([0, 0, 0])
In [2]: B = np.array([1, 1, 1, 1, 1, 1])
In [3]: idx = [0, 0, 1, 1, 2, 2]
In [4]: np.add.at(A, idx, B)
In [5]: A
Out[5]: array([2, 2, 2])
2020-12-20