2012-06-12 13 views
7

Ciò che confonde è che se si vuole creare un array si utilizzaQual è la differenza tra numpy "identificatori di tipo" e "tipi" in Cython?

chunk = np.array ([[94.,3.],[44.,4.]], dtype=np.float64) 

Ma se si vuole definire il tipo all'interno di un riferimento buffer, si utilizza

cdef func1 (np.ndarray[np.float64_t, ndim=2] A): 

    print A 

notare la differenza tra np.float64 e np.float64_t.

mie congetture

sto indovinando che un type identifier è ciò che viene creato in modo esplicito w/il Cython C-like typedef sintassi

ctypedef np.float64_t dtype_t 

Ma la NumPy type è proprio il tipo di Python <type 'type'>.

>>> type (np.float64) 
<type 'type'> 

La documentazione Numpy su dtype s non mi aiuta. http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

risposta

6

nel codice Cython, dovete fare:

import numpy as np 
cimport numpy as np 

il primo modulo NumPy linea di importazione nello spazio pitone, ma la seconda linea è sufficiente includere numpy.pxd nello spazio Cython.

puoi trovare numpy.pxd nella cartella di installazione di Cython. Definisce float64_t come:

ctypedef double  npy_float64 
ctypedef npy_float64 float64_t 
+0

Ok, così sembra che la maggior parte di {float, int} {32,64} _t sia di tipo C double, estesa a Python. Anche se non riesco a trovare la menzione dei tipi senza "_t", almeno in numpy.pxd – HeyWatchThis

+0

I tipi senza "_t" provengono da "import numpy", non da "cimport numpy". Se questo è fonte di confusione, puoi fare "cimport numpy as cnp" per vedere la differenza. –

+0

Sì, ho letto anche quello, sfogliando [http://cython.readthedocs.org/en/latest/src/tutorial/numpy.html]. Puoi aggiungerlo come risposta e accetterò, o alla fine lo aggiungerò. – HeyWatchThis

Problemi correlati