通过重复数组

时间:2018-02-15 12:28:15

标签: python arrays numpy indexing

我想将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执行此操作?

1 个答案:

答案 0 :(得分:4)

只要形状对齐,np.add.at就可以了,例如,a在这里需要为1D。

a = a.squeeze()
np.add.at(a, idx, vals)

a
array([1., 2., 7.])