How to access fields in a struct imported from a .mat file using loadmat in Python?

◇◆丶佛笑我妖孽 提交于 2019-11-28 00:36:38

问题


Following this question which asks (and answers) how to read .mat files that were created in Matlab using Scipy, I want to know how to access the fields in the imported structs.

I have a file in Matlab from which I can import a 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]

Now I want to do the same 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)

The question is, how can I access the members of the struct G: Inp, Tgt, Ltr and Relevant, the way I can in Matlab?


回答1:


First, I'd recommend to upgrade to Scipy svn if possible - there has been active development of the matlab io with some really dramatic speed ups recently.

Also as mentioned it might be worth trying with struct_as_record=True. But otherwise you should be able to get it out by playing around interactively.

Your G is an array of mio struct objects - you can check G.shape for example. In this case I think G = x['G'][0,0] should give the object you want. Then you should be able to access G.Inp etc.



来源:https://stackoverflow.com/questions/1984714/how-to-access-fields-in-a-struct-imported-from-a-mat-file-using-loadmat-in-pyth

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!