我正在尝试使用以下代码读取一个matlab文件
import scipy.io
mat = scipy.io.loadmat('test.mat')
它给出了以下错误
raise NotImplementedError('Please use HDF reader for matlab v7.3 files')
NotImplementedError: Please use HDF reader for matlab v7.3 files
那么,有没有人能遇到同样的问题,并且可以取悦任何示例代码
谢谢
9条答案
按热度按时间kqlmhetl1#
我已经创建了一个small library来加载MatLab 7.3文件:
要将
.mat
7.3作为词典加载到Python中,请执行以下操作:就这么简单!
xxls0lw82#
尝试使用
h5py
模块svdrlsy43#
我怀疑,除非您有matlab结构,否则您最终应该得到
arrays
字典中的数据。希望它能帮上忙!voase2hg4#
根据Magu_'s answer on a related thread,查看hdf5storage包,它具有读取v7.3 MatLab MAT文件的方便函数;它非常简单,如下所示
hzbexzde5#
我看过这个问题:https://github.com/h5py/h5py/issues/726。如果您使用
-v7.3
选项保存MAT文件,则应该使用(在Python3.x下)生成密钥列表:例如,为了访问变量
a
,您必须使用相同的技巧:enyaitl36#
根据Scipy的食谱。http://wiki.scipy.org/Cookbook/Reading_mat_files,
从MatLab 7.3版开始,MAT文件实际上默认使用HDF5格式保存(除非在保存时使用-vx标志,请参见帮助保存在MatLab中)。例如,可以使用PyTables或h5py包在Python中读取这些文件。目前似乎不支持读取MAT文件中的MatLab结构。
也许您可以使用Octave来使用-vx标志重新保存。
toiithl67#
尽管搜索了几个小时,我也没有找到如何访问MatLab v7.3结构。希望这个部分的答案会对某些人有所帮助,我很高兴看到更多的指点。
所以从(我认为[0][0]产生于MatLab将一切都赋予维度)开始:
给出:<HDF5对象引用>
再次将此引用传递给f:
它给出了一个数组:将其转换为NumPy数组并提取值(或者递归地提取另一个:
如果访问磁盘的速度很慢,加载到内存可能会有所帮助。
进一步编辑:在搜索了我的最终解决方案后(我真的希望其他人有更好的解决方案!)我是从Python调用MatLab的,这非常容易和快速:
a11xaf1n8#
此函数用于读取由Matlab生成的HDF5.mat文件,并返回Numpy数组的嵌套判定的结构。MatLab以Fortran顺序写入矩阵,因此这也将矩阵和高维数组转置为传统的Numpy顺序
arr[..., page, row, col]
。w80xi6nr9#
如果您只读入基本的数组和结构,请参阅vikrantt的answer在类似的post上。但是,如果您使用的是MatLab
table
,那么最好的解决方案是完全避免使用save
选项。我已经创建了一个简单的助手函数来将MatLab
table
转换为标准的hdf5文件,并创建了另一个助手函数来将数据提取到PandasDataFrame
中。Matlab Helper函数
Python Helper函数
重要说明