【发布时间】:2020-05-19 20:55:03
【问题描述】:
我正在为 MATLAB 的 accumarray 在 numpy 中寻找一个快速的解决方案。 accumarray 累积数组中属于同一索引的元素。一个例子:
a = np.arange(1,11)
# array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
accmap = np.array([0,1,0,0,0,1,1,2,2,1])
结果应该是
array([13, 25, 17])
到目前为止我做了什么:
我已经尝试了recipe here 中的accum 函数,它运行良好但速度很慢。
accmap = np.repeat(np.arange(1000), 20)
a = np.random.randn(accmap.size)
%timeit accum(accmap, a, np.sum)
# 1 loops, best of 3: 293 ms per loop
然后我尝试使用solution here,它应该工作得更快,但它不能正常工作:
accum_np(accmap, a)
# array([ 1., 2., 12., 13., 17., 10.])
有没有内置的 numpy 函数可以像这样进行累加?还是有其他建议?
【问题讨论】:
-
我的博文已过期。试试 github 版本。它有一个覆盖良好的测试套件。
-
@Michael 和我创建了一个名为
numpy-groupies的包,其中包含一个名为aggregate的类似 accumarray 的函数。有关详细信息,请参阅下面的答案。
标签: python numpy accumulator