如何在numpy中通过索引累积数组?

map*_*ple 5 python arrays numpy vectorization

我有一个数组:

a = np.array([0,0,0,0,0,0])
Run Code Online (Sandbox Code Playgroud)

我想在a的每个索引中添加一些其他数组,而索引可以出现多次.我想得到每个索引的一部分.我写:

a[np.array([1,2,2,1,3])] += np.array([1,1,1,1,1])
Run Code Online (Sandbox Code Playgroud)

但得到一个:

array([0, 1, 1, 1, 0, 0])
Run Code Online (Sandbox Code Playgroud)

但我想要的是得到:

array([0, 2, 2, 1, 0, 0])
Run Code Online (Sandbox Code Playgroud)

如何在没有for循环的numpy中实现这个?

oxa*_*org 12

使用pure numpy,AND避免for循环:

np.add.at(a, np.array([1,2,2,1,3]), np.array([1,1,1,1,1]))
Run Code Online (Sandbox Code Playgroud)

输出:

>>> a = np.array([0,0,0,0,0,0])
>>> np.add.at(a, np.array([1,2,2,1,3]), np.array([1,1,1,1,1]))
>>> a
array([0, 2, 2, 1, 0, 0])
Run Code Online (Sandbox Code Playgroud)

请注意,这会进行就地替换.这是您所期望的,但未来的观众可能不希望这样.因此注意:)