Я использую numpexpr для быстрой математики на больших массивах, но если размер массива меньше размера кэша ЦП, написание моего кода на Cython с использованием простой математики для массива выполняется намного быстрее, особенно если функция вызывается несколько раз.
Вопрос в том, как вы работаете с массивами в Cython, или, более точно, существует ли прямой интерфейс к типу Python для array.array в Cython?Я хотел бы сделать что-то вроде этого (простой пример)
cpdef array[double] running_sum(array[double] arr):
cdef int i
cdef int n = len(arr)
cdef array[double] out = new_array_zeros(1.0, n)
... # some error checks
out[0] = arr[0]
for i in xrange(1,n-1):
out[i] = out[i-1] + arr[i]
return(out)
Сначала я попробовал использовать обертку Cython и работал с ndarrays, но кажется, что их создание очень дорого для небольших одномерных массивов, по сравнениюс созданием массива C с помощью malloc (но обработка памяти становится проблемой).
Спасибо!