Me gustaría llamar a mi función C desde Python, para manipular algunas matrices NumPy. La función es la siguiente:Envolviendo la función C en Cython y NumPy
void c_func(int *in_array, int n, int *out_array);
donde los resultados se suministran en out_array, cuyo tamaño Sé de antemano (no es mi función, en realidad). Trato de hacer en el correspondiente .pyx presentar los siguientes, con el fin de poder pasar la entrada a la función de una matriz NumPy, y almacenar el resultado en una matriz 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
pero me da "Python objects cannot be cast to pointers of primitive types"
error para la asignación de salida. ¿Cómo logro esto?
(Si requiero que la persona que llama Python asigna la matriz de salida adecuada, entonces yo puedo hacer
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)
Pero puedo hacer esto de una manera que la persona que llama no tiene que asignar previamente la forma apropiada matriz de salida dimensionada?
hicieron intenta proporcionar añadir '' cdef np.ndarray' antes de asignacion out_array'? – Simon
¡Eso funciona, gracias! – Peter