Доступ к столбцам массива записей NumPy в Cython

Я относительно опытный программист на 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 перемассивов. Он компилируется и запускается без проблем.

У меня вопрос, как мне изменить это, чтобы оно могло работать с любым столбцом? В приведенном выше примере столбец для суммирования жестко закодирован и доступен через точечную нотацию. Можно ли изменить функцию так, чтобы столбец для суммирования передавался в качестве параметра?

6
задан joshayers 23 February 2012 в 23:36
поделиться