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

包含python中matlab类的Access.mat文件,python,matlab,class,mat-file,Python,Matlab,Class,Mat File,我有一个从Matlab2012b生成的.mat文件。它包含一个带有用户定义的matlab类的变量 在python 3.3中使用scipy.io.loadmat加载文件时,我得到以下结果: 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_workspac

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

在python 3.3中使用scipy.io.loadmat加载文件时,我得到以下结果:

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']的简单结果是:

MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])], 
      dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])
我被困在这里了。我是python新手,尝试从matlab移植我的旧作品。任何帮助都将不胜感激


谢谢。

不幸的是,据我所知,SciPy不支持包含新样式类对象(用
classdef
定义的对象)的mat文件,也不支持任何第三方mat文件读取器。返回的
mat
字典中的
\uuu函数\uu工作区\uuuuuuu
元素以某种未记录的、尚未反向工程的方式包含您要查找的信息

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


(更严格地说,Matlab保存这些对象时,Matlab数组类型id为17;只能枚举15个以上的类型)。

作为后记,我已经成功地对很多这种格式进行了反向工程。详情请参阅。