【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形式
相关推荐
zSD55rt5a4 分钟前
方差在扩散模型保护中的作用
人工智能·harmonyos
人生百态,人生如梦24 分钟前
情感交互仿生人从技术到落地构想3——技术交流贴(2026.7)
人工智能·机器学习·人机交互·交互·具身智能
用户6522384381125 分钟前
为什么成熟的 LLM 应用,都把"后端地址"做成可切换的配置
人工智能
Aa998833425 分钟前
AI视觉检测设备厂家的技术评估框架——以及AI视觉检测的检出边界与适用条件
人工智能
wuhanzhanhui33 分钟前
当AI遇见储能!2026武汉国际数字能源产业与新型电力及储能技术展览会
人工智能·能源
赶紧写完去睡觉1 小时前
Anaconda 创建虚拟环境与使用
python·pycharm·conda
迷途呀1 小时前
Python:函数中的参数类型
开发语言·笔记·python·langchain·nlp
Tangyuewei1 小时前
给 AI 套上缰绳:Harness Engineering 是什么
人工智能
AI棒棒牛1 小时前
第11讲 | 目标检测任务:边界框、IoU、类别与置信度
人工智能·yolo·目标检测·yolo26
allione1 小时前
AI时代测试方向AI for Testing和Testing for AI
人工智能·ai测试