c语言读取 .mat文件_『Python动手学』Python处理.mat文件

本文介绍了如何使用Python的scipy库读取和修改.mat文件,包括保存.mat文件、读取文件内容及修改数据。同时提到,对于MATLAB 7.3版本的大文件,需要使用h5py库进行处理。
摘要由CSDN通过智能技术生成

c30ff2dc66516695bf6a1dc1faaf95c8.png
山不来就我,我便去就山
--《伊斯兰教典》第三章第四节

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:songCodesface_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:songCodesface_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:python中处理.mat文件_修行记-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值