如何在Python中使用loadmat访问从.mat文件导入的结构体字段?
根据这个问题,它询问(并回答)如何使用Scipy读取在Matlab中创建的.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)
我的问题是,如何像在Matlab中那样访问结构体G的成员:Inp
、Tgt
、Ltr
和Relevant
?
1 个回答
6
首先,我建议如果可以的话,升级到Scipy的最新版本,因为最近对matlab的输入输出功能进行了积极的开发,速度提升非常明显。
另外,正如之前提到的,尝试使用 struct_as_record=True
可能会有帮助。不过,除了这个,你可以通过互动的方式来尝试,应该能找到解决办法。
你的G是一个包含mio结构体对象的数组,比如你可以检查一下 G.shape
来了解它的形状。在这种情况下,我认为 G = x['G'][0,0]
应该能给你想要的对象。然后你就可以访问 G.Inp
等等。