2009-12-31 15 views
7

Después de this question que pregunta (y responde) cómo leer los archivos .mat que se crearon en Matlab usando Scipy, quiero saber cómo acceder a los campos en las estructuras importadas.¿Cómo acceder a los campos en una estructura importada de un archivo .mat usando loadmat en Python?

Tengo un archivo en Matlab de la que puede importar una estructura:

>> load bla % imports a struct called G 
>> G 

G = 

     Inp: [40x40x2016 uint8] 
     Tgt: [8x2016 double] 
     Ltr: [1x2016 double] 
    Relevant: [1 2 3 4 5 6 7 8] 

Ahora quiero hacer lo mismo en Python:

x = scipy.io.loadmat('bla.mat') 
>>> x 
{'__version__': '1.0', '__header__': 'MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: Wed Jun 07 21:17:24 2006', 'G': array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object), '__globals__': []} 
>>> x['G'] 
array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object) 
>>> G = x['G'] 
>>> G 
array([[<scipy.io.matlab.mio5.mat_struct object at 0x0191F230>]], dtype=object) 

La pregunta es, ¿cómo puedo acceder los miembros de la estructura G: Inp, Tgt, Ltr y Relevant, de la manera que puedo en Matlab?

+0

Qué dicen (G) y dir (G) decir (y lo mismo para G [0]) – Kimvais

+0

¿Qué sucede si usa 'x = scipy.io.loadmat (' bla.mat ', struct_as_record = True) '? Ver http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html – unutbu

Respuesta

6

En primer lugar, recomendaría actualizar a Scipy svn si es posible - ha habido un desarrollo activo del matlabio con algunas aceleraciones realmente dramáticas recientemente.

También como se mencionó podría valer la pena intentar con struct_as_record=True. Pero de lo contrario, debería poder sacarlo jugando de forma interactiva.

Su G es una matriz de objetos mio struct - puede consultar G.shape por ejemplo. En este caso creo que G = x['G'][0,0] debería dar el objeto que desea. Entonces debería poder acceder a G.Inp etc.

+1

Esto funcionó para mí también, sin embargo tuve que acceder a él como un suscriptor/diccionario, es decir, x [ 'G'] [0, 0] ['Inp'] – eacousineau

Cuestiones relacionadas