我想将vals
中的值加到索引列表a
中指定的较小数组idx
的元素中。
import numpy as np
a = np.zeros((1,3))
vals = np.array([1,2,3,4])
idx = np.array([0,1,2,2])
a[0,idx] += vals
这会生成结果[[ 1. 2. 4.]]
,但我想要结果[[ 1. 2. 7.]]
,因为它应该将vals
中的3和vals
中的4添加到a
的第2个元素中1}}。
我可以实现我想要的目标:
import numpy as np
a = np.zeros((1,3))
vals = np.array([1,2,3,4])
idx = np.array([0,1,2,2])
for i in np.unique(idx):
fidx = (idx==i).astype(int)
psum = (vals * fidx).sum()
a[0,i] = psum
print(a)
有没有办法在不使用for循环的情况下使用numpy执行此操作?
答案 0 :(得分:4)
只要形状对齐,np.add.at
就可以了,例如,a
在这里需要为1D。
a = a.squeeze()
np.add.at(a, idx, vals)
a
array([1., 2., 7.])