我使用 numexpr 对大型数组进行快速数学运算,但如果数组的大小小于 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 数组相比,创建它们似乎对于小型 1D 数组非常昂贵(但内存处理变得很痛苦)。
谢谢!