¿Cuál es la diferencia entre "identificadores de tipo" numpy y "tipos" dentro de Cython?

Lo que es confuso es que si quieres crear una matriz, usas

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

Pero si desea definir el tipo dentro de un buffer referencia, tu usas

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

    print A 

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

Mis conjeturas

Supongo que un type identifier es lo que se crea explícitamente con Cython C-like typedef sintaxis

ctypedef np.float64_t dtype_t

Pero el tonto type es solo el pitón <type 'type'> tipo .

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

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

preguntado el 12 de junio de 12 a las 21:06

1 Respuestas

en tu código cython, haces:

import numpy as np
cimport numpy as np

la primera línea importa el módulo numpy en el espacio python, pero la segunda línea solo incluye numpy.pxd en el espacio cython.

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

ctypedef double       npy_float64
ctypedef npy_float64    float64_t

Respondido el 13 de junio de 12 a las 04:06

Bien, parece que la mayoría de los {float,int}{32,64}_t son de tipo C double , extendidos a Python. Aunque no puedo encontrar una mención de los tipos sin "_t", al menos en numpy.pxd - Oye, mira esto

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

Sí, acabo de leer eso también, navegando a través de [cython.readthedocs.org/en/latest/src/tutorial/numpy.html] . Puede agregar eso como respuesta y lo aceptaré, o eventualmente lo agregaré. - Oye, mira esto

¿Soy yo o no se puede encontrar el numpy.pxd? ¿La fuente de cython github no parece contenerlo? ah, la documentación está detrás, está aquí -> github.com/cython/cython/blob/master/Cython/Includes/numpy/… - Carro

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.