>>> a = np.array([0, 0])
>>> a[[0, 0, 1, 1]] + [1, 2, 3, 4]
array([1, 2, 3, 4])
>>> a[[0, 0, 1, 1]] += [1, 2, 3, 4]
>>> a
array([2, 4])
我了解a[[0, 0, 1, 1]]
会返回a
的视图,其前两个元素指向a[0]
,最后两个元素指向a[1]
。现在如果我想获得a = [3, 7]
怎么办?也就是说,完成以下操作的最简单方法是什么?
a = [0, 0]
indices = [0, 0, 1, 1]
values_to_add = [1, 2, 3, 4]
for i in indices:
a[i] += values_to_add[i]
答案 0 :(得分:3)
您可能需要查看np.add.at
>>> np.add.at(a, [0,0,1,1], [1,2,3,4])
>>> a
array([3, 7])
请注意,np.add.at
通常可以替换为np.bincount
,以获得可观的加速。
最后,高级索引不会返回视图而是复制。然而,作业仍然是另一回事。如果将作业分配给副本,那将不会非常有用......