Jestem stosunkowo doświadczonym programistą Pythona, ale nie napisałem żadnego C w bardzo długim czasie i próbuję zrozumieć Cython. Próbuję napisać funkcję Cython, która będzie działać na kolumnie recarray NumPy.Dostęp do kolumn tablicy rekordów NumPy w Cython
Kod, który do tej pory znajduję się poniżej.
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
W wierszu tłumacza:
array = np.recarray((100,), names=['f0', 'i0', 'i1', 'i2'],
formats=['f4', 'i8', 'i8', 'i8'])
recarray_func.sum(array)
To po prostu sumuje kolumnę recarray f0
. Kompiluje i działa bez problemu.
Moje pytanie brzmi, w jaki sposób zmodyfikować to tak, aby działało w dowolnej kolumnie? W powyższym przykładzie kolumna do sumy jest zakodowana i dostępna za pośrednictwem notacji kropkowej. Czy jest możliwa zmiana funkcji, aby kolumna na sumę została przekazana jako parametr?
coś podobnego może działać - możesz przekazać w postaci topionego jako typ running_sum i przekazać go jako wskaźnik, a następnie rzutowania może być do tego typu. – shaunc