Я хотел бы вызвать свою функцию 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)
Но могу ли я сделать это таким образом, чтобы вызывающему объекту не нужно было предварительно-выделить выходной массив соответствующего размера?