我正在寻找在numpy中类似MATLAB的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])
我已经做了什么: 我尝试了这里的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
我尝试使用这里的解决方案,它应该更快,但它不正确地工作:
accum_np(accmap, a)
# array([ 1., 2., 12., 13., 17., 10.])
有没有内置的numpy函数可以像这样进行累加?或者有其他建议吗?
numpy-groupies
的包,其中包括一个名为aggregate
的类似于accumarray的函数。有关详细信息,请参见下面的答案。 - dan-man