【发布时间】:2012-02-23 23:36:22
【问题描述】:
我是一个相对有经验的 Python 程序员,但很长时间没有写过任何 C 语言,我正在尝试理解 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 列求和。它编译和运行没有问题。
我的问题是,我将如何修改它以便它可以在任何列上运行?在上面的示例中,要求和的列是硬编码的,并通过点表示法访问。是否可以更改函数,以便将要求和的列作为参数传入?
【问题讨论】: