Come è possibile creare array numpy vuoti di tipo int
in Cython? I seguenti lavori per me per gli array doppio o float:come inizializzare gli array numpy integer a dimensione fissa in Cython?
# make array of size N of type float
cdef np.ndarray[float, ndim=1] myarr = np.empty(N)
# make array of size N of type int
cdef np.ndarray[int, ndim=1] myarr = np.empty(N)
Tuttavia, se cerco di fare lo stesso con int, non riesce:
# this fails
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N)
# wanted to set first element to be an int
myarr[0] = 5
dà l'errore:
ValueError : Buffer dtype mismatch, previsto 'int' ma ottenuto 'double'
Poiché apparentemente np.empty()
restituisce un doppio. Ho provato:
cdef np.ndarray[np.int, ndim=1] myarr = np.empty(N, dtype=int)
ma dà lo stesso errore. Come si può fare?
Perché questo non funziona con semplice 'int' o solo' np.int' al contrario di 'np.int32_t'? – user248237dfsf
L'argomento type della dichiarazione ndarray deve essere un tipo C, non un tipo di oggetto Python. Se si digita nel file di intestazione cython numerpy 'numpy.pxd', si scoprirà che' np.int32_t' alla fine si traduce nella dichiarazione 'signed int'. –
potresti spiegare perché usi 'dtype = np.int' e non' dtype = np.int32_t' quando chiami 'np.empty'? quest'ultimo non funziona – user248237dfsf