【h5py】 提取mat文件中的HDF5格式的数据

121 阅读2分钟

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 np
 ​
 file_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查看数据文件结构

1-mat文件结构.png

2-mat文件结构.png

3-mat文件结构.png

使用Matlab,能将该大型文件HDF5的结构看的十分清楚,接下来我们使用Python解析该数据结构

2、Python直接打开该数据结构

 import numpy as np
 import h5py
 ​
 file_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)