numpy,没有迭代的子集的总和

时间:2014-04-11 09:44:59

标签: numpy

情境:

我有一个带有一些值的数组values。 这些元素分为几组。 分组信息存储在另一个数组中,表示groups。此数组具有相同的values维度。 groups的第i个元素告诉哪个组属于values的第i个元素。

我需要为每个组计算部分和ov values

实施例

例如,在我有3组的情况下:

values = [0.1, 0.5, 10e-5, 12., 10e3, 0.2, 15., 10e-6]
groups = [1  , 1  , 2    , 3  , 3   , 1  , 3  , 2    ]

我想计算这个数组

sums = [0.1+0.5+0.2, 10e-5+10e-6, 12.+10e3+15.]

问题:

由于我有大量的元素(数百万)和几千个组,我使用numpy数组来处理这些对象。我实际上是在寻找复杂度为O(N)的东西,没有超过组数的循环。此外,欢迎任何性能提升。

目前,我的代码如下所示:

for group_id in xrange(0,number_of_groups):
    sums[i]=numpy.sum(values[groups==i])

此代码进行number_of_groups*number_of_elements次操作。

此代码太慢,我正在搜索循环群组的内容。

可能的C解决方案:

可以在C中完成这项工作.C中的代码可以是:

for(i=0;i<n_elements;i++)
    sums[groups[i]]+=values[i]

正如您所看到的,此代码只有number_of_elements次迭代。组数组中没有迭代。

所以..

我怎么能在numpy中写出相同的内容?

0 个答案:

没有答案