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