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

2024-10-01 09:24:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从matlab2012b生成的.mat文件,它包含一个用户定义的matlab类的变量。在

使用加载文件时scipy.io.loadmat公司在Python3.3中,我得到了以下内容:

mat=scipy.io.loadmat('D:\test.mat')
mat
{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Fri Feb 22 15:26:28 2013', '__function_workspace__': array([[ 0,  1, 73, ...,  0,  0,  0]], dtype=uint8), '__globals__': [], '__version__': '1.0', 'None': MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])], 
      dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])}

我希望访问“cStream”类型的“futureDS”对象,但似乎无法使用mat['None']进行访问。调用mat['None']简单的结果是:

^{pr2}$

我被困在这里了。我是python的新手,正在尝试从matlab移植我的旧工作。任何帮助都将不胜感激。在

谢谢。在


Tags: 文件用户iotestnone定义公司scipy
1条回答
网友
1楼 · 发布于 2024-10-01 09:24:38

不幸的是,据我所知,SciPy不支持包含新样式类对象(那些用classdef定义的)的mat文件,也不支持任何第三方mat文件读取器。返回的mat字典中的__function_workspace__元素以某种未文档化的、尚未进行逆向工程的方式包含了您所追求的信息。在

最简单的解决方案是在将自定义类保存到磁盘之前,在Matlab中将它们转换为基本的struct对象。这可以通过简单地调用struct(futureDS)来实现(尽管有警告)。它将所有公共和私有属性公开为普通字段,任何第三方读者都可以阅读这些字段。在

(更严格地说,Matlab用Matlab数组类型id 17保存这些对象,official documentation (PDF)只枚举15到15的类型)。在

相关问题 更多 >