前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『Python动手学』Python处理.mat文件

『Python动手学』Python处理.mat文件

作者头像
小宋是呢
发布2020-09-11 14:36:55
2K0
发布2020-09-11 14:36:55
举报
文章被收录于专栏:深度应用深度应用深度应用

0.引子

最近笔者在处理数据时,遇到.mat文件,遂记录下自己的理解与处理步骤。

.mat文件是Matlab中常用的数据格式,形式类似json键值对。

{'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep 9 16:13:43 2020', '__version__': '1.0', '__globals__': [], 'key1': array([[0, 1]]), 'key2': array([[3]])}

1.实战

在Python中,需要通过scipy来操作.mat文件。首先如未安装,请执行:

pip install scipy

操作一:保存mat文件

import scipy.io as sio

data1 = {
    "key1":[0,1],
    "key2":3
        }

sio.savemat("save.mat",data1)

此时可以发现当前文件夹下面多了一个"save.mat"文件

操作二:读取mat文件

import scipy.io as sio

data1 = {
    "key1":[0,1],
    "key2":3
        }

#sio.savemat("save.mat",data1)

data2 = sio.loadmat("save.mat")

print("data1: ",type(data1),data1)
print("data2: ",type(data2),data2)

输出:

(ml) Y:\song\Codes\face_recall>python deal_data.py
data1:  <class 'dict'> {'key1': [0, 1], 'key2': 3}
data2:  <class 'dict'> {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep  9 16:13:43 2020', '__version__': '1.0', '__globals__': [], 
'key1': array([[0, 1]]), 'key2': array([[3]])}

可以看出,mat文件内容被保存时,会自动添加一些信息:__header__,__version__,__globals__

'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep  9 16:13:43 2020', '__version__': '1.0', '__globals__': []

同时还是dict格式数据,修改的是list或者scale会转化为array,这个可以看做numpy.array

操作三:修改mat文件

import scipy.io as sio

data1 = {
    "key1":[0,1],
    "key2":3
        }

#sio.savemat("save.mat",data1)

data2 = sio.loadmat("save.mat")

print("data1: ",type(data1),data1)
print("data2: ",type(data2),data2)

data2["__version__"] = "2.0"
data2["key2"] = 4

sio.savemat("save.mat",data2)

data3 = sio.loadmat("save.mat")

print("data3: ",type(data3),data3)

输出:

(ml) Y:\song\Codes\face_recall>python deal_data.py
data1:  <class 'dict'> {'key1': [0, 1], 'key2': 3}
data2:  <class 'dict'> {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep  9 16:13:43 2020', 
'__version__': '1.0', '__globals__': [], 'key1': array([[0, 1]]), 'key2': array([[3]])}
data3:  <class 'dict'> {'__header__': b'MATLAB 5.0 MAT-file Platform: nt, Created on: Wed Sep  9 16:47:59 2020', 
'__version__': '1.0', '__globals__': [], 'key1': array([[0, 1]]), 'key2': array([[4]])}

可以发现data2["key2"]被修改为了4,而"__version__"信息无法修改。这个问题考虑是因为带"__*__"是内置信息,类似于私有变量,无法修改。

2.补充

在1.中可以看到用scipy保存的是"'MATLAB 5.0"版本数据,而v7.3版本的.mat文件是matlab中保存大文件的格式,使用上面的方式是无法读取的,这个时候需要使用h5py,安装如下:

pip install h5py

使用

import h5py 

data = h5py.File('data.mat')

-1.参考

-10:https://blog.csdn.net/GYGuo95/article/details/79537640

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0.引子
  • 1.实战
    • 操作一:保存mat文件
      • 操作二:读取mat文件
      • 2.补充
      • -1.参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档