2009-12-31 2 views
7

После this question, который запрашивает (и отвечает), как читать файлы .mat, созданные в Matlab, используя Scipy, я хочу знать, как получить доступ к полям в импортированных структурах.Как получить доступ к полям в структуре, импортированной из файла .mat с помощью loadmat в Python?

У меня есть файл в 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, Ltr и Relevant, как я могу в Matlab?

+0

Что говорят (G) и dir (G) (и то же для G [0]) – Kimvais

+0

Что произойдет, если вы используете 'x = scipy.io.loadmat (' bla.mat», struct_as_record = True)'? См. http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html – unutbu

ответ

6

Во-первых, я бы рекомендовал обновить до Scipy svn, если это возможно - в последнее время активно развивается Matlab io с некоторыми действительно резкими ускорениями.

Также, как уже упоминалось, стоит попробовать struct_as_record=True. Но в противном случае вы сможете получить его, играя в интерактивном режиме.

Ваш G представляет собой массив объектов mio struct - вы можете проверить, например, G.shape. В этом случае я думаю, что G = x['G'][0,0] должен предоставить объект, который вы хотите. Тогда вы должны иметь доступ к G.Inp и т. Д.

+1

Это сработало и для меня, однако мне пришлось получить к нему доступ как словарь/словарь, т. Е. X [ 'G'] [0, 0] ['Inp'] – eacousineau