Я бы хотел вызвать функцию 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 objects cannot be cast to pointers of primitive types"
ошибка для назначения вывода. Как это сделать?
(Если мне требуется, чтобы вызывающий абонент 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)
Но могу ли я сделать это так, чтобы вызывающему абоненту не приходилось предварительно выделять выходной массив соответствующего размера?