如何在Python中向量化增量

Ant*_*ere 5 python numpy vectorization

我有一个二维数组,并且有一些数字要添加到某些单元格中。我想对操作进行矢量化以节省时间。问题是当我需要将多个数字添加到同一单元格时。在这种情况下,矢量化代码仅添加最后一个。“ a”是我的数组,“ x”和“ y”是我要增加的单元格的坐标,“ z”包含我要添加的数字。

import numpy as np

a=np.zeros((4,4))
x=[1,2,1]
y=[0,1,0]
z=[2,3,1]
a[x,y]+=z
print(a)
Run Code Online (Sandbox Code Playgroud)

如您所见,a [1,0]应该增加两次:一个乘以2,一个乘以1。因此,期望的数组应该是:

[[0. 0. 0. 0.]
 [3. 0. 0. 0.]
 [0. 3. 0. 0.]
 [0. 0. 0. 0.]]
Run Code Online (Sandbox Code Playgroud)

但是我得到了:

[[0. 0. 0. 0.]
 [1. 0. 0. 0.]
 [0. 3. 0. 0.]
 [0. 0. 0. 0.]]
Run Code Online (Sandbox Code Playgroud)

使用for循环可以轻松解决该问题,但是我想知道是否可以正确向量化此操作。

jde*_*esa 4

用于np.add.at

import numpy as np

a = np.zeros((4,4))
x = [1, 2, 1]
y = [0, 1, 0]
z = [2, 3, 1]
np.add.at(a, (x, y), z)
print(a)
# [[0. 0. 0. 0.]
#  [3. 0. 0. 0.]
#  [0. 3. 0. 0.]
#  [0. 0. 0. 0.]]
Run Code Online (Sandbox Code Playgroud)