如何在python中读取matlab输出的.mat文件

写在前面

经常会使用matlab处理数据,比如之前在进行空间滤波发现matlab自带的空间滤波函数。但是,由于后续使用python绘图更熟练一点,所以涉及到在python中读取matlab输出的文件,一般以.mat文件为主。下面测试了几种读取方式,选了一个比较好用的方式。

这里简单将读取的.mat文件分为两种数据类型:

  • 1、array数组(如网格数据)
  • 2、str字符串列表(如网页链接)

对于数组的读取

scipy.io.loadmat

对于一般的数组,可以通过scipy库的相关函数包进行读取,命令如下:


import scipy.io as sio

f = sio.loadmat(r'I:\data.mat')

print(f.keys())

data=f['MASK']

将mat文件中的变量的名称进行打印并进行读取,比如我这里的变量名称为:MASK,这样得到的数据data就是标准存储的数组格式

mat4py.loadmat

安装方式:

conda / pip install mat4py

这里也可以通过mat4py包的相关函数进行读取,读取相同的数据,得到的数据类型为:list-列表或者是dict-字典


from mat4py import loadmat

f = loadmat(r'I:\data.mat')['MASK']

但是感觉不如直接用scipy的好用

mat73.loadmat

安装方式:

conda / pip install mat73

读取方式:


import mat73

f = mat73.loadmat(r'I:\data.mat') 

这也是一种读取方式,但是会受限于matlab的版本,比如说我这里使用读取上面相同的数据,就会报错提示

TypeError: I:\data.mat is not a MATLAB 7.3 file. Load with scipy.io.loadmat() instead.

提醒我们使用scipy.io.loadmat()来读取上述文件

对于字符串的读取

如果你通过matlab报错输出的文件,不是数组而是字符串等等。


import scipy.io as sio

f = sio.loadmat(r'I:\str.mat')

使用scipy.io.loadmat()会发生以下报错:

NotImplementedError: Please use HDF reader for matlab v7.3 files, e.g. h5py

然后根据他的提示呢,我们可以分别使用刚刚上面提到的mat73.loadmat()或者是h5py


import mat73

f= mat73.loadmat(r'I:\str.mat') 

h5py

安装h5py:

conda install h5py

这里需要提醒一句的是,如果你使用 pip install h5py,而且你在之前安装过geopandas或者salem,且是在windows环境安装的,需要注意版本的依赖,因为安装h5py时,是会安装相关版本适配的gdal库的;所以我建议你使用 conda install h5py

读取方式:


import h5py

f = h5py.File(r'I:\str.mat')

print(f.keys())

使用下来感觉mat73可以直接将文件中的数值提取出来,相对来说更方面一点。

总结

总体上,比较了对于纯数组array以及纯字符str输出的mat文件在python中的读取方式。
对于array输出的mat文件,推荐使用scipy.io.loadmat(r'./data.mat')进行读取,而对于str输出的mat文件,推荐使用mat73.loadmat(r'./data.mat') 进行读取。
当然,这里也存在一些问题,比如说当输出的mat文件包含多种数据类型时,是否上述两种方式会不适应,下次具体遇到时再具体解决。

https://stackoverflow.com/questions/874461/read-mat-files-in-python

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

简朴-ocean

继续进步

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值