【h5py】 提取mat文件中的HDF5格式的数据
h5py 提取mat文件中的HDF5格式的数据
- 使用纯Python查看数据
- 配合Matlab后,使用Python查看数据
一、使用纯Python查看文件数据内容
原理:当HDF5存储的是struct类型数据,解析时要像一棵树,我们需要逐层次的去解析,直到打印出的是一个
<HDF5 dataset "EEG": shape (1, 66), type "|O">
或者 <HDF5 dataset "8": shape (219, 57), type "<f8">
表明这是一个dataset数据结构,从而我们可以用特定形式访问到这些数据
以获取EEG key 值的数据集数据为例,不断解析获得EEG数据
重要提取信息在注释"""""中
根据自己想要的数据结构进行参考
import h5py
import numpy as npfile_path = "D:/cnt.mat" # 替换成你的文件路径with h5py.File(file_path, "r") as hpy:print(hpy.keys()) # 查看key值"""<KeysViewHDF5 ['#refs#', 'cnt']>"""cnt = hpy["cnt"]print(cnt) #打印object信息"""<HDF5 group "/cnt" (5 members)>"""print(cnt.keys()) # 打印key值"""<KeysViewHDF5 ['EEG', 'Gender', 'HumanFactor', 'clab', 'fs']>"""EEG = cnt["EEG"]print(EEG) # 打印EEG对象信息"""<HDF5 dataset "EEG": shape (1, 66), type "|O">这里shape = (1, 66) 表示的是EEG对应的key的value中有1个EEG数据集,里面有66个EEG数据文件"""print(EEG[0]) # 打印EEG[0]信息,这一步基本上已经获取了EEG数据集相关的信息"""<HDF5 object reference> 需要进行最后一次提取[<HDF5 object reference> <HDF5 object reference> <HDF5 object reference>... ... ...<HDF5 object reference> <HDF5 object reference> <HDF5 object reference>]"""print(EEG[0].shape) # 打印 EEG[0] 的shape"""(66,) ,表示这是一个长度为66的一维数组"""# 遍历66个数据集for idx in range(len(EEG[0])):single_dataset = hpy[EEG[0][idx]] #提取数据集print(single_dataset)print(np.array(single_dataset)) # 该条语句会将其数据转换成np array格式"""<HDF5 dataset "7": shape (281, 57), type "<f8">, single_dataset.shape = (281, 57)这里可直接进行遍历最终的数据data"""# for data in single_dataset:# print(np.array(data))# print(data.shape)"""遍历获取每个维度的数据data"""
二、使用Matlab,并迁移到Python正确解析数据
1、Matlab查看数据文件结构
使用Matlab,能将该大型文件HDF5的结构看的十分清楚,接下来我们使用Python解析该数据结构
2、Python直接打开该数据结构
import numpy as np
import h5pyfile_path = "D:/cnt.mat"
with h5py.File(file_path, 'r') as file:EEG = file["cnt"]["EEG"]for i in range(len(EEG[0])):dataset = file[EEG[0][i]]print(f"dataset_{i} info : {dataset}")print(np.array(dataset).shape, i) # 将数据矩阵转换成np array形式