numpy.array .__ iadd__和重复的索引
我有一个数组:
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])
1,1,1 array([1, 1, 1])
,所以显然B
中的值没有被总结。 获得结果array([2, 2, 2])
的最佳方式是什么array([2, 2, 2])
? 我必须迭代索引吗?
为这个numpy 1.8添加了减less:
(a,指数,b =无)
对由'indices'指定的元素的操作数'a'执行无缓冲的就地操作。 对于另外的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])
怎么样:
A = np.array([1, 2, 3]) idx = [0, 0, 1, 1, 2, 2] A += np.bincount(idx, minlength=len(A))
如果A开始为零,显然更简单:
A = np.bincount(idx)