Numpy使用索引数组在另一个数组中累积一个数组

时间:2012-03-20 16:04:33

标签: python arrays numpy

我的问题是关于我想用numpy表达的特定数组操作。

我有一系列浮点数w和一系列与idx长度相同的索引w,我希望将所有widx相加{ {1}}值并将其收集到数组v中。 作为循环,这看起来像这样:

for i, x in enumerate(w):
     v[idx[i]] += x

有没有办法在阵列操作中执行此操作? 我的猜测是v[idx] += w,但这不起作用,因为idx多次包含相同的索引。

谢谢!

2 个答案:

答案 0 :(得分:15)

为此目的引入了

numpy.bincount

tmp = np.bincount(idx, w)
v[:len(tmp)] += tmp

我认为从1.6开始你也可以将最小长度传递给bincount

答案 1 :(得分:4)

这是一种已知行为,虽然有些不幸,但没有一个numpy级别的解决方法。如果你扭动手臂,可以使用bincount。)你自己做循环是最好的选择。

请注意,如果不重新使用名称w并且不引入另一组索引(例如

),您的代码可能会更清晰一些
for i, w_thing in zip(idx, w):
    v[i] += w_thing

如果你需要加速这个循环,你可能需要下降到C. Cython使这相对容易。