本人最近在做心电信号的处理,有时候会用到npy文件,但官方给的数据库中并没有npy文件,只有dat、ecg、st、hea文件,于是,我先先去PhysioBank ATM将心电信号数据导出为mat格式文件,通过如下语句便可以将mat转换为npy。
注意:只有mat文件里全都是数据时才可直接通过np.save转为npy格式,如果mat文件里不仅仅是数据,还包括一些非数据的内容,比如标签之类的,则比如先将mat文件里的数据提取完后才能进行转换。
以我处理的心电信号为例来说,它是一个字典类型dict,里面包括一些属性,通过相应的语句可以看出它里面包含的属性有:'__header__', '__version__', '__globals__', 'val'这四个,我刚开始对于这四个属性并不了解,不清楚各个里面存了什么内容,将各个属性打印后,发现val里面存的是数据,因此,我将val里面数据提出来,便可以将其转为npy文件。
导入数据:
data=sio.loadmat('G:MIT_BPDmit-bih-polysomnographic-database-1.0.0slp66m.mat')
如果mat里全都是数值,则可以通过如下语句转为npy
np.save('G:MIT_BPDmit-bih-polysomnographic-database-1.0.0slp66npy.npy',data)
如果mat里包含非数值型数据:
查看文件包含的属性:
print(list(data))
打印各个属性包含的内容:
print(data["val"])
提取包含数值的那个属性
data2=data['val'];
导出npy
np.save('G:MIT_BPDmit-bih-polysomnographic-database-1.0.0slp66npy.npy',data2)
完整代码如下
case1:mat只包含数值文件:
import numpy as np
import scipy.io as sio
data=sio.loadmat('G:MIT_BPDmit-bih-polysomnographic-database-1.0.0slp66m.mat')
np.save('G:MIT_BPDmit-bih-polysomnographic-database-1.0.0slp66npy.npy',data)
case2:mat包含非数值:
import numpy as np
import scipy.io as sio
data=sio.loadmat('G:MIT_BPDmit-bih-polysomnographic-database-1.0.0slp66m.mat')
#以下为我调试的内容,查看哪个属性下包含数值文件
print(type(data)) #显示mat的数据类型
print(list(data)) #只显示mat包含的属性
print(data["val"]) #显示属性值#
#找到数值型的属性后,转为npy
data2=data['val'];
np.save('G:MIT_BPDmit-bih-polysomnographic-database-1.0.0slp66npy.npy',data2)
PhysioBank ATMhttps://archive.physionet.org/cgi-bin/atm/ATM



