如何在 Python 中使用 loadmat 访问从 .mat 文件导入的结构中的字段?

Posted

技术标签:

【中文标题】如何在 Python 中使用 loadmat 访问从 .mat 文件导入的结构中的字段?【英文标题】:How to access fields in a struct imported from a .mat file using loadmat in Python? 【发布时间】:2010-12-31 09:07:29 【问题描述】:

在this question 询问(并回答)如何读取使用 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)

问题是,如何访问结构 G 的成员:InpTgtLtrRelevant,就像在 Matlab 中那样?

【问题讨论】:

help(G) 和 dir(G) 说什么(G[0] 也一样) 如果你使用x = scipy.io.loadmat('bla.mat',struct_as_record=True)会发生什么?见docs.scipy.org/doc/scipy/reference/generated/… 【参考方案1】:

首先,如果可能,我建议升级到 Scipy svn - matlab io 一直在积极开发,最近有一些非常显着的加速。

如前所述,struct_as_record=True 可能值得一试。但除此之外,您应该能够通过互动玩弄它。

您的 G 是一组 mio 结构对象 - 例如,您可以检查 G.shape。在这种情况下,我认为G = x['G'][0,0] 应该提供您想要的对象。那么你应该可以访问G.Inp等。

【讨论】:

这对我也有用,但是我必须将它作为下标/字典来访问,即 x['G'][0, 0]['Inp']

以上是关于如何在 Python 中使用 loadmat 访问从 .mat 文件导入的结构中的字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Scipy.io.loadmat 将 Matlab mat 文件中的字符串单元格数组加载到 Python 列表或元组中

在 python 中访问包含 matlab 类的 .mat 文件

使用 scipy.io.loadmat 在 python 中加载 matlab 表

在 python 中访问时如何保留 matlab 结构?

使用 scipy.io.loadmat 从 .mat Matlab 文件中将字典键转换为 Python 中具有相同值的变量名

scipy.io.loadmat 嵌套结构(即字典)