添加到numpy数组的视图

时间:2018-04-02 08:44:09

标签: python numpy

>>> 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]

1 个答案:

答案 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,以获得可观的加速。

最后,高级索引不会返回视图而是复制。然而,作业仍然是另一回事。如果将作业分配给副本,那将不会非常有用......