python 读取 mat 的两三事

  • 前言
    • 关于mat文件版本的问题
    • 当mat中存的是一个cell数据怎么办?
    • 关于一些错误

前言

最近使用matlab的时频分析工具包处理了一组数据,然后将其特征保存为mat文件交由python做进一步处理。这里用到了一些使用python对matlab保存的mat数据文件的读取的操作以及过程中的一些问题,在此做一个记录,希望也能给遇到同样问题的盆友一些帮助。

关于mat文件版本的问题

  1. 在Python中读取MATLAB v7.3以前的.mat文件使用scipy中的scipy.io
import scipy.io as scio
filepath = 'D:/aaa/bbb.mat'
dict_data = scio.loadmat(filepath)
array_data = dict_data['array_name']

得到的dict_data 是一个字典,可以用dict_data .keys()查看其中包含的变量名,然后再通过dict_data ['变量名']来读取数据即可

  1. v7.3版本以后的.mat文件(-v7.3版本能支持较大的文件)需要使用h5py进行读取,在使用h5py之前首先要安装h5py。
import h5py
filepath = 'D:/aaa/bbb.mat'
dict_data = h5py.File(filepath)
array_data = dict_data['array_name']  

array_name通常都与数据名相同

当mat中存的是一个cell数据怎么办?

这一部分参考这篇博客https://blog.csdn/u013630349/article/details/47111773
写得特别好特别详细

array_data =[dict_data[ele[nele]][:] for ele in dict_data['array_name']]

但是读出来的数据是个list,需要用np.array(data)将其转换成数组
还有一点就是从python中读出来的数据是转置了的

关于一些错误

这两个错误的产生原因都是因为用了错误的方式读取了不适合版本的数据
这个是由于用scipy.io读取了v7.3版本的数据文件

Please use HDF reader for matlab v7.3 files

这个是由于用h5py读取了较低版本的数据文件

OSError: Unable to create file (unable to open file: name = 'D:\target\target1.mat', 
errno = 17, error message = 'File exists', flags = 15, o_flags = 502)

换成正确函数读取就好了~

更多推荐

python读取mat数据文件