我有一个数组:
A = np.array([0, 0, 0])
和重复的索引列表:
idx = [0, 0, 1, 1, 2, 2]
和另一个我希望使用索引添加到A的数组:
B = np.array([1, 1, 1, 1, 1, 1])
操作:
A[idx] += B
给出结果:array([1, 1, 1])
,所以显然B
的值不会被总结。结果array([2, 2, 2])
的最佳方式是什么?我是否必须迭代索引?
答案 0 :(得分:17)
对于这个numpy 1.8添加了at
缩减:
at(a,indices,b = None)
在操作数上执行无缓冲的就地操作' a'对于元素 指数'指定。对于add ufunc,此方法是等效的 到
a[indices] += b
,除了为元素累积结果 被索引不止一次。例如,a[[0,0]] += 1
会 因缓冲而只增加第一个元素一次,而add.at(a, [0,0], 1)
将增加第一个元素两次。.. versionadded :: 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])
答案 1 :(得分:0)
怎么样:
A = np.array([1, 2, 3])
idx = [0, 0, 1, 1, 2, 2]
A += np.bincount(idx, minlength=len(A))
显然,如果A以0开始,则更简单:
A = np.bincount(idx)