【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数据
  • 重要提取信息在注释"""""中
  • 根据自己想要的数据结构进行参考
python 复制代码
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查看数据文件结构



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

2、Python直接打开该数据结构
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)	# 将数据矩阵转换成np array形式
相关推荐
Deepoch12 分钟前
Deepoc 大模型在无人机行业应用效果的方法
人工智能·科技·ai·语言模型·无人机
Deepoch16 分钟前
Deepoc 大模型:无人机行业的智能变革引擎
人工智能·科技·算法·ai·动态规划·无人机
kngines44 分钟前
【字节跳动】数据挖掘面试题0003:有一个文件,每一行是一个数字,如何用 MapReduce 进行排序和求每个用户每个页面停留时间
人工智能·数据挖掘·mapreduce·面试题
Binary_ey44 分钟前
AR衍射光波导设计遇瓶颈,OAS 光学软件来破局
人工智能·软件需求·光学软件·光波导
昵称是6硬币1 小时前
YOLOv11: AN OVERVIEW OF THE KEY ARCHITECTURAL ENHANCEMENTS目标检测论文精读(逐段解析)
图像处理·人工智能·深度学习·yolo·目标检测·计算机视觉
费弗里1 小时前
Python全栈应用开发利器Dash 3.x新版本介绍(1)
python·dash
平和男人杨争争1 小时前
机器学习2——贝叶斯理论下
人工智能·机器学习
静心问道1 小时前
XLSR-Wav2Vec2:用于语音识别的无监督跨语言表示学习
人工智能·学习·语音识别
算家计算1 小时前
5 秒预览物理世界,2 行代码启动生成——ComfyUI-Cosmos-Predict2 本地部署教程,重塑机器人训练范式!
人工智能·开源
摆烂工程师1 小时前
国内如何安装和使用 Claude Code 教程 - Windows 用户篇
人工智能·ai编程·claude