在Python中读取.mat文件
有没有人有成功的经验阅读二进制Matlab .mat文件在Python?
(我已经看到, scipy
支持读取.mat文件,但我没有成功,我安装了scipy
0.7.0版本,我找不到loadmat()
方法)
我傻。 忘记导入io …
import scipy.io mat = scipy.io.loadmat('file.mat')
scipy.io.savemat
和scipy.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文件并注释每一行来找出每个字节的含义
- 使用类来保存每个数据元素(如
miCOMPRESSED
,miMATRIX
,mxDOUBLE
或miINT32
) -
.mat
文件的结构对于将数据元素保存在树形数据结构中是最佳的。 每个节点有一个类和子节点
也可以通过PyTables处理hdf5文件。 他们的FAQ有一个和h5py: https ://pytables.github.io/FAQ.html比较的条目。 PyTables还配备了方便的可视化ViTables: http ://vitables.org/galleries/Screenshots/