2009-12-31 22 views
7

關注this question請問(和答案)如何讀取使用Scipy在Matlab中創建的.mat文件,我想知道如何訪問導入結構中的字段。如何在Python中使用loadmat訪問從.mat文件導入的結構中的字段?

我在Matlab文件從中我可以導入一個結構:

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

現在我想這樣做在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) 

問題是,我怎麼能訪問結構G的成員:Inp,Tgt,LtrRelevant,我可以在Matlab中的方式?

+0

什麼幫助(G)和dir(G)說(和G [0]相同) – Kimvais 2009-12-31 10:08:36

+0

如果使用'x = scipy.io.loadmat(' bla.mat」,struct_as_record = TRUE)'?見 http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html – unutbu 2009-12-31 12:00:33

回答

6

首先,如果可能的話,我建議升級到Scipy svn--最近有一些真正戲劇化的加速的matlab io的活躍開發。

也如上所述,它可能是值得與struct_as_record=True嘗試。但除此之外,你應該能夠通過交互式玩弄來獲得它。

您的G是一個mio結構對象的數組 - 例如,您可以檢查G.shape。在這種情況下,我認爲G = x['G'][0,0]應該給你想要的對象。那麼你應該可以訪問G.Inp

+1

這也適用於我,但我必須作爲suscript /字典訪問它,即x [ 'G'] [0,0] ['Inp'] – eacousineau 2011-07-18 17:22:50

相關問題