Вы можете 'вызвать' функцию непосредственно из Cython, объявив ее как extern .
cdef extern from "mylibraryheader.h":
void cfun1(void* indatav, int rowcount, int colcount, void* outdatav)
void cfun2(double** indata, int rowcount, int colcount, doubke** outdata)
Теперь вы можете вызывать эти функции, как в C / C ++.Обратите внимание, что в Cython нет ключевого слова const , его можно не указывать.К сожалению, я не могу привести пример того, как преобразовать массив NumPy в массив double .Но вот пример запуска его из списка пар.
cdef extern from "mylibraryheader.h":
void cfun1(void* indatav, int rowcount, int colcount, void* outdatav)
void cfun2(double** indata, int rowcount, int colcount, double** outdata)
cdef extern from "stdlib.h":
ctypedef int size_t
void* malloc(size_t)
void free(void*)
def py_cfunc1(*values):
cdef int i = 0
cdef int size = sizeof(double)*len(values)
cdef double* indatav = <double*> malloc(size)
cdef double* outdatav = <double*> malloc(size)
cdef list outvalues = []
for v in values:
indatav[i] = <double>v
i += 1
cfun1(<void*>indatav, 1, len(values), <void*>outdatav)
for 0 <= i < len(values):
outvalues.append(outdatav[i])
return outvalues
Примечание: не проверено