функция накопления cython numpy

Мне нужно реализовать функцию суммирования элементов массива с переменной длиной участка. Итак,

a = np.arange(10)
section_lengths = np.array([3, 2, 4])
out = accumulate(a, section_lengths)
print out
array([  3.,   7.,  35.])

я попытался реализовать в cythonздесь:

https://gist.github.com/2784725

производительность я сравниваю с чистым numpyрешение для случая, когда все значения section_length одинаковы:

LEN = 10000
b = np.ones(LEN, dtype=np.int) * 2000
a = np.arange(np.sum(b), dtype=np.double)
out = np.zeros(LEN, dtype=np.double)

%timeit np.sum(a.reshape(-1,2000), axis=1)
10 loops, best of 3: 25.1 ms per loop

%timeit accumulate.accumulate(a, b, out)
10 loops, best of 3: 64.6 ms per loop

есть ли у вас предложения по улучшению производительности?

7
задан Andrea Zonca 24 May 2012 в 23:04
поделиться