Я бы хотел вызвать функцию C из Python, чтобы манипулировать некоторыми массивами NumPy. Функция выглядит так:Обтекание функции C в Cython и 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"
ошибка для назначения вывода. Как это сделать?
(Если я требую, чтобы Питон Вызывающий выделяет правильный массив выходной, то я могу сделать
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)
Но я могу сделать это таким образом, что абонент не имеет предварительно распределить соответствующим образом размерный выходной массив?
пытались ли вы предоставить добавить 'CDEF np.ndarray' перед тем' out_array' присваивания? – Simon
Это работает, спасибо !!! – Peter