'对数组重复索引求和值'

2024-03-28 16:35:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将vals中的值求和为索引列表idx中指定的较小数组a的元素。你知道吗

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的第二个元素中。你知道吗

我可以通过以下方式实现我的目标:

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实现的方法?你知道吗


Tags: importnumpy元素列表forasnp方式
1条回答
网友
1楼 · 发布于 2024-03-28 16:35:46

只要形状对齐,np.add.at就有可能,也就是说,a在这里需要是1D。你知道吗

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

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

相关问题 更多 >