2012-06-12 17 views
7

Lo que es confuso es que si se quiere crear una matriz que utiliza¿Cuál es la diferencia entre numpy "tipo de identificadores" y "tipos" dentro de Cython?

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

Pero si se quiere definir el tipo dentro de una referencia buffer, se utiliza

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

    print A 

notar la diferencia entre np.float64 y np.float64_t.

mis suposiciones

Supongo que un type identifier es lo que se crea de forma explícita w/la Cython C-como typedef sintaxis

ctypedef np.float64_t dtype_t 

Pero el numpy type es sólo el tipo de Python <type 'type'>.

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

La documentación Numpy en dtype s no me ayuda. http://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html

Respuesta

6

en el código Cython, lo hace:

import numpy as np 
cimport numpy as np 

el primer módulo de importación numpy línea en el espacio pitón, pero la segunda línea justo incluyen numpy.pxd en el espacio Cython.

puede encontrar numpy.pxd en su carpeta de instalación cython. Define float64_t como:

ctypedef double  npy_float64 
ctypedef npy_float64 float64_t 
+0

Ok, parece que la mayoría de las {float, int} {32,64} _t son de tipo C, extendidas a Python. Aunque no puedo encontrar la mención de los tipos sin "_t", al menos en numpy.pxd – HeyWatchThis

+0

Los tipos sin "_t" provienen de "import numpy", no de "cimport numpy". Si esto es confuso, puede hacer "cimport numpy como cnp" para ver la diferencia. –

+0

Sí, acabo de leer eso también, navegando a través de [http://cython.readthedocs.org/en/latest/src/tutorial/numpy.html]. Puedes agregar eso como respuesta y yo aceptaré, o eventualmente lo agregaré. – HeyWatchThis

Cuestiones relacionadas