我有一个带有一些值的数组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中的代码可以是:
for(i=0;i<n_elements;i++)
sums[groups[i]]+=values[i]
正如您所看到的,此代码只有number_of_elements
次迭代。组数组中没有迭代。
我怎么能在numpy中写出相同的内容?