大きな配列の高速計算に numpexpr を使用しますが、配列のサイズが CPU キャッシュよりも小さい場合、単純な配列計算を使用して Cython でコードを記述すると、特に関数が複数回呼び出される場合に高速になります。
問題は、Cython で配列をどのように操作するか、またはより明示的に: Cython に Python の array.array 型への直接インターフェイスがあるかどうかです。私がやりたいことは、このようなものです(簡単な例)
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 numpy ラッパーを使用して ndarrays を操作しましたが、malloc を使用して C 配列を作成する場合と比較して、ndarrays を作成するのは非常にコストがかかるようです (ただし、メモリ処理は面倒です)。
ありがとう!