首页 文章

用Python读取.mat文件

提问于
浏览
272

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

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

8 回答

  • 111

    傻我 . 忘了导入io ...

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

    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
    
  • 5

    看完答案后,我已经搞了半个小时 . 希望这个答案有所帮助

    首先将mat文件保存为

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

    之后在Python中使用通常的loadmat

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

    安装Matlab 2014b或更新版本后,可以使用Matlab engine for Python

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

    有一个名为mat4py的好包,可以很容易地使用

    pip install mat4py
    

    它很简单(来自网站):

    Load data from MAT-file

    函数 loadmat 只使用Python的 dictlist 对象将存储在MAT文件中的所有变量加载到一个简单的Python数据结构中 . 数字和单元格数组将转换为行排序的嵌套列表 . 挤压数组以消除只有一个元素的数组 . 生成的数据结构由与 JSON 格式兼容的简单类型组成 .

    示例:将MAT文件加载到Python数据结构中:

    data = loadmat('datafile.mat')
    

    变量 datadict ,其中的变量和值包含在MAT文件中 .

    Save Python data structure to a MAT-file

    可以使用函数 savemat 将Python数据保存到MAT文件中 . 数据的结构必须与 loadmat 相同,即它应该由简单的数据类型组成,如 dictliststrintfloat .

    示例:将Python数据结构保存到MAT文件:

    savemat('datafile.mat', data)
    

    参数 data 应为带变量的 dict .

  • 19

    MathWorks本身也有MATLAB Engine for Python . 如果您有Matlab,这可能值得考虑(我不知道是否允许将其分发给其他用户(如果这些人有Matlab可能没问题,否则NumPy可能是正确的方法吗?) .

    此外,如果您想自己完成所有基础知识,MathWorks provides(如果链接更改,请尝试google for matfile_format.pdf 或其 Headers MAT-FILE Format )有关文件格式结构的详细文档 . 它并不像我个人想的那么复杂,但显然,这不是最简单的方法 . 它还取决于您要支持的 .mat 文件的功能数量 .

    我写了一个"small"(大约700行)的Python脚本,它可以读取一些基本的 .mat 文件 . 我已经学到了很多新东西,而且非常有趣(大部分时间) . 因为我害怕我不能发表它...但我可以在这里给出一些建议:

    • 首先阅读文档

    • 使用HEX-Editor(例如HxD)并查看要解析的引用 .mat -file

    • 通过将字节保存到txt文件并注释每一行来尝试找出每个字节的含义

    • 使用类保存每个数据元素(例如 miCOMPRESSEDmiMATRIXmxDOUBLEmiINT32

    • .mat -files'结构最适合在树数据结构中保存数据元素;每个节点都有一个类和子节点

  • 0

    Reading the file

    import scipy.io
    mat = scipy.io.loadmat(file_name)
    

    Insecting the type of mat variable

    print(type(mat))
    #OUTPUT - <class 'dict'>
    

    字典中的 keysmatlab variablesvaluesobjects assigned to those variables .

  • 5

    对于高维数据,mat4py包更好用:

    from mat4py import loadmat
    data = loadmat('datafile.mat')
    

相关问题