我有一个数组:
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])?我是否必须遍历索引?
array([1, 1, 1])
B
array([2, 2, 2])
为此numpy 1.8增加了at减少:
at
at(a,索引,b =无) 对’indices’指定的元素在操作数’a’上执行无缓冲的就地操作。对于加法ufunc,此方法等效于a[indices] += b,不同之处在于对索引多次的元素累积结果。例如,a[[0,0]] += 1由于缓冲,将仅对第一个元素递增一次,而 add.at(a, [0,0], 1)对第一个元素将递增两次。 ..版本添加:: 1.8.0
at(a,索引,b =无)
对’indices’指定的元素在操作数’a’上执行无缓冲的就地操作。对于加法ufunc,此方法等效于a[indices] += b,不同之处在于对索引多次的元素累积结果。例如,a[[0,0]] += 1由于缓冲,将仅对第一个元素递增一次,而 add.at(a, [0,0], 1)对第一个元素将递增两次。
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])