我的问题是关于我想用numpy表达的特定数组操作。
我有一系列浮点数w
和一系列与idx
长度相同的索引w
,我希望将所有w
与idx
相加{ {1}}值并将其收集到数组v
中。
作为循环,这看起来像这样:
for i, x in enumerate(w):
v[idx[i]] += x
有没有办法在阵列操作中执行此操作?
我的猜测是v[idx] += w
,但这不起作用,因为idx
多次包含相同的索引。
谢谢!
答案 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使这相对容易。