Обертывание функции C в Cython и NumPy

Я хотел бы вызвать свою функцию C из Python, чтобы манипулировать некоторыми массивами NumPy. Функция выглядит следующим образом:

void c_func(int *in_array, int n, int *out_array);

, где результаты предоставляются в out_array, размер которого я знаю заранее (не моя функция, на самом деле). Я пытаюсь сделать в соответствующем файле .pyx следующее, чтобы иметь возможность передать входные данные функции из массива NumPy и сохранить результат в массиве NumPy:

def pyfunc(np.ndarray[np.int32_t, ndim=1] in_array):    
    n = len(in_array)
    out_array = np.zeros((512,), dtype = np.int32)
    mymodule.c_func(<int *> in_array.data, n, <int *> out_array.data)
    return out_array

Но я получаю Ошибка "Объекты Python не могут быть приведены к указателям примитивных типов"для выходного назначения. Как это сделать?

(Если я требую, чтобы вызывающий объект Python выделял правильный выходной массив, то я могу сделать

def pyfunc(np.ndarray[np.int32_t, ndim=1] in_array, np.ndarray[np.int32_t, ndim=1] out_array):  
    n = len(in_array)
    mymodule.cfunc(<int *> in_array.data, n, <int*> out_array.data)

Но могу ли я сделать это таким образом, чтобы вызывающему объекту не нужно было предварительно-выделить выходной массив соответствующего размера?

10
задан Peter 8 April 2012 в 17:49
поделиться