Cómo pasar una matriz numpy de tipos de cadena a una función en Cython
Pasando una matriz numpy de dtypenp.float64_t
funciona bien (abajo), pero no puedo pasar matrices de cadenas.
Esto es lo que funciona:
# cython_testing.pyx
import numpy as np
cimport numpy as np
ctypedef np.float64_t dtype_t
cdef func1 (np.ndarray[dtype_t, ndim=2] A):
print A
def testing():
chunk = np.array ( [[94.,3.],[44.,4.]], dtype=np.float64)
func1 (chunk)
Pero no puedo hacer que esto funcione. No puedo encontrar los 'identificadores de tipo' coincidentes para los tipos de cadena numpy.
# cython_testing.pyx
import numpy as np
cimport numpy as np
ctypedef np.string_t dtype_str_t
cdef func1 (np.ndarray[dtype_str_t, ndim=2] A):
print A
def testing():
chunk = np.array ( [['huh','yea'],['swell','ray']], dtype=np.string_)
func1 (chunk)
El error de compilación es:
Error compiling Cython file:
------------------------------------------------------------
ctypedef np.string_t dtype_str_t
^
------------------------------------------------------------
cython_testing.pyx:9:9: 'string_t' is not a type identifier
ACTUALIZAR
Per mirando a través denumpy.pxd
, Veo lo siguientectypedef
declaraciones Tal vez sea suficiente para decir que puedo usaruint8_t
¿Y fingir que todo es normal, siempre que pueda hacer algo de casting?
ctypedef unsigned char npy_uint8
ctypedef npy_uint8 uint8_t
Solo hay que ver lo caro que será ese casting.