numpy中是否可以向量化以下操作?
a = np.zeros(3)
idx = np.array([1, 0, 1])
val = np.array([1, 2, 3])
for i, v in zip(idx, val):
a[i] += v
# a = [2, 4, 0]
以下代码无法正常工作
a = np.zeros(3)
idx = np.array([1, 0, 1])
val = np.array([1, 2, 3])
a[idx] += val
# wrong answer: a = [2, 3, 0]
我们可以使用np.bincount
设置np.bincount
作为权重:
val
实际上,这完全与问题中所分享的一样。通过在np.bincount(idx, weights=val, minlength=len(idx)).astype(int)
#array([2, 4, 0])
上添加weight
,而不是:
np.bincount
与获得计数相同:
np.bincount(idx, minlength=len(idx))
# array([1, 2, 0], dtype=int64)
我们有for i in idx:
a[i] += 1
print(a)
# array([1., 2., 0.])
:
out[n] += weight[i]