在Python中读取.mat文件

有没有人有成功的经验阅读二进制Matlab .mat文件在Python?

(我已经看到, scipy支持读取.mat文件,但我没有成功,我安装了scipy 0.7.0版本,我找不到loadmat()方法)

我傻。 忘记导入io …

 import scipy.io mat = scipy.io.loadmat('file.mat') 

scipy.io.savematscipy.io.loadmat适用于matlab数组–v7.3。 但最好的部分是matlab – v7.3文件是hdf5数据集。 所以他们可以使用一些工具,包括numpy阅读。

对于python,你将需要h5py扩展名,这需要在你的系统上使用HDF5。

 import numpy as np import h5py f = h5py.File('somefile.mat','r') data = f.get('data/variable1') data = np.array(data) # For converting to numpy array 

读完答案后我已经搞了半个小时了。 希望这个答案有帮助

首先保存为mat文件

 save('test.mat','-v7') 

之后在Python中使用通常的loadmat

 import scipy.io as sio test = sio.loadmat('test.mat') 

安装了Matlab 2014b或更新的版本,可以使用Python的Matlab引擎 :

 import matlab.engine eng = matlab.engine.start_matlab() content = eng.load("example.mat",nargout=1) 

MathWorks本身也有用于Python的MATLAB引擎 。 如果你有Matlab,这可能是值得考虑的(我自己没有尝试过,但它比只读Matlab文件有更多的function)。 但是,我不知道是否允许将它分发给其他用户(如果这些人有Matlab,可能没有问题,否则NumPy可能是正确的路?)。

此外,如果您想自己完成所有基础知识,MathWorks将提供 (如果链接更改,请尝试google for matfile_format.pdf或其标题MAT-FILE Format ),详细说明文件格式的结构。 这并不像我个人认为的那么复杂,但显然,这不是最简单的方法。 这还取决于你想支持的.mat文件的多less特性。

我写了一个“小”(约700行)的Python脚本,可以读取一些基本的.mat文件。 我既不是Python专家,也不是初学者,我花了大约两天时间(使用上面链接的MathWorks文档)。 我学到了很多新东西,这很有趣(大部分时间)。 正如我在工作中编写Python脚本一样,恐怕我无法发布它…但是我可以在这里提供一些build议:

  • 首先阅读文档
  • 使用HEX编辑器(如HxD )并查看要分析的引用.mat -file
  • 尝试通过将字节保存到txt文件并注释每一行来找出每个字节的含义
  • 使用类来保存每个数据元素(如miCOMPRESSEDmiMATRIXmxDOUBLEmiINT32
  • .mat文件的结构对于将数据元素保存在树形数据结构中是最佳的。 每个节点有一个类和子节点

也可以通过PyTables处理hdf5文件。 他们的FAQ有一个和h5py: https ://pytables.github.io/FAQ.html比较的条目。 PyTables还配备了方便的可视化ViTables: http ://vitables.org/galleries/Screenshots/