2009-12-31 5 views
7

Seguendo this question che chiede (e risponde) come leggere i file .mat che sono stati creati in Matlab usando Scipy, voglio sapere come accedere ai campi nelle strutture importate.Come accedere ai campi in una struct importata da un file .mat usando loadmat in Python?

Ho un file in Matlab da cui posso importare uno struct:

>> 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] 

Ora voglio fare lo stesso in 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 domanda è: come posso accedere i membri della struttura G: Inp, Tgt, Ltr e Relevant, il modo in cui posso in Matlab?

+0

Cosa fare di aiuto (G) e dir (G) dire (e lo stesso per G [0]) – Kimvais

+0

Cosa succede se si utilizza 'x = scipy.io.loadmat (' bla.mat', struct_as_record = true) '? Vedi http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html – unutbu

risposta

6

Per prima cosa, consiglierei di eseguire l'upgrade a Scipy svn se possibile - c'è stato uno sviluppo attivo del MATLAB io con alcune accelerazioni davvero drammatiche di recente.

Anche come detto potrebbe valere la pena provare con struct_as_record=True. Ma altrimenti dovresti essere in grado di farlo giocando in modo interattivo.

Il tuo G è una matrice di oggetti my struct - puoi controllare ad esempio G.shape. In questo caso penso che G = x['G'][0,0] dovrebbe dare l'oggetto che si desidera. Poi si dovrebbe essere in grado di accedere G.Inp ecc

+1

Questo ha funzionato anche per me, ma ho dovuto accedervi come un file di script, cioè x [ 'G'] [0, 0] ['Inp'] – eacousineau