Я относительно опытный программист на 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)
Это просто суммирует столбец f0
в массиве. Компилируется и запускается без проблем.
Мой вопрос: как бы я изменил это, чтобы он мог работать на любом столбце? В приведенном выше примере столбец для суммирования жестко запрограммирован и доступен через точечную запись. Можно ли изменить функцию, чтобы столбец sum передавался как параметр?