Pasar una matriz numpy estructurada con cadenas a una función de cython

Estoy intentando crear una función en cython que acepte una matriz de registro o de registro estructurado numpy definiendo un tipo de estructura cython. Supongamos que tengo los datos:

a = np.recarray(3, dtype=[('a', np.float32), ('b', np.int32), ('c', '|S5'), ('d', '|S3')]) a[0] = (1.1, 1, 'this\0', 'to\0') a[1] = (2.1, 2, 'that\0', 'ta\0') a[2] = (3.1, 3, 'dogs\0', 'ot\0') 

(Nota: el problema descrito a continuación ocurre con o sin el terminador nulo)

Entonces tengo el código de cython:

 import numpy as np cimport numpy as np cdef packed struct tstruct: np.float32_t a np.int32_t b char[5] c char[3] d def test_struct(tstruct[:] x): cdef: int k tstruct y for k in xrange(3): y = x[k] print ya, yb, yc, yd 

Cuando bash ejecutar test_struct(a) , test_struct(a) el error:

 ValueError: Expected a dimension of size 5, got 8 

Si en la matriz y la estructura correspondiente se reordenan de modo que los campos que contienen cadenas no sean adyacentes entre sí, entonces la función funciona como se espera. Parece como si la función de Cython no estuviera detectando correctamente el límite entre los campos d y piensa como si estuvieras pasando en una matriz de caracteres de la sum de las longitudes.

Aparte de reorganizar los datos (lo que es posible pero no ideal), ¿hay otra manera de pasar un recarray con datos de cadena de longitud fija a Cython?

Actualización: Esto parece ser un error potencial de Cython. Vea la siguiente discusión en el grupo de Google Cython que sugiere dónde está surgiendo el problema:

https://groups.google.com/forum/#!topic/cython-users/TbLbXdi0_h4

Actualización 2: Este error se ha corregido en la twig de cython maestro en Github a partir del 23 de febrero de 2014 y el parche está progtwigdo para su inclusión en v0.20.2: https://github.com/cython/cython/commit/58d9361e0a6d4cb3d4e87775f78e0550c2fea836

Este fue un error que se ha corregido en la twig de cython maestro en Github a partir del 22 de febrero de 2014 y el parche está progtwigdo para su inclusión en v0.20.2: https://github.com/cython/cython/commit/58d9361e0a6d4cb3d4e87775f78e0550c2fea836