Я ищу быстрое решение для MATLAB's accumarray
в numpy. accumarray
накапливает элементы массива, принадлежащие одному и тому же индексу. Пример:Есть ли эквивалент эквивалента памяти MATLAB в numpy?
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
функции в recipe here, которая работает хорошо, но медленно.
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'] (http://github.com/ml31415/numpy-groupies), который включает в себя функцию, подобную памяти, которая называется' aggregate'. Подробнее см. Мой ответ ниже. –