Vorrei chiamare la mia funzione C da Python, per manipolare alcuni array di NumPy. La funzione è simile a questo:Funzione C Wrapping in Cython e NumPy
void c_func(int *in_array, int n, int *out_array);
in cui i risultati sono forniti in out_array, la cui dimensione lo so in anticipo (non la mia funzione, in realtà). Provo a fare nel corrispondente .pyx depositare seguente, al fine di poter passare l'input della funzione da una matrice NumPy, e memorizzare il risultato in un array 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
Ma ottenere "Python objects cannot be cast to pointers of primitive types"
errore per l'assegnazione dell'output. Come posso realizzare questo?
(Se richiedo che il chiamante Python alloca la matrice di output corretto, allora posso fare
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)
Ma posso fare questo in modo che il chiamante non deve pre-allocare l'appropriato dimensioni array di uscita?
ha fatto si tenta di fornire aggiungere 'cdef np.ndarray' prima' assegnazione out_array'? – Simon
Funziona, grazie !!! – Peter