我是一个相对有经验的Python程序员,但在很长一段时间里没有写任何C语言,所以我试图理解Cython。我正在尝试编写一个将在NumPy recarray的列上运行的Cython函数。访问Cython中的NumPy记录数组列
我到目前为止的代码如下。
recarray_func.pyx:
import numpy as np
cimport numpy as np
cdef packed struct rec_cell0:
np.float32_t f0
np.int64_t i0, i1, i2
def sum(np.ndarray[rec_cell0, ndim=1] recarray):
cdef Py_ssize_t i
cdef rec_cell0 *cell
cdef np.float32_t running_sum = 0
for i in range(recarray.shape[0]):
cell = &recarray[i]
running_sum += cell.f0
return running_sum
在解释器提示:
array = np.recarray((100,), names=['f0', 'i0', 'i1', 'i2'],
formats=['f4', 'i8', 'i8', 'i8'])
recarray_func.sum(array)
这简单地求和recarray的f0
柱。它编译和运行没有问题。
我的问题是,我会如何修改它,以便它可以在任何列上操作?在上面的例子中,总和列是硬编码的,并通过点符号访问。是否有可能改变函数,这样总和列被作为参数传入?
像这样的东西可能会工作 - 你可以传递一个融合的类型作为running_sum的类型,并将其作为指针传递,然后可以将该类型转换为该类型。 – shaunc 2012-05-05 04:16:35