【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形式
相关推荐
大模型最新论文速读2 分钟前
06-08 · LLM 最新论文速览
论文阅读·人工智能·深度学习·机器学习·自然语言处理
武汉知识图谱科技4 分钟前
华为克拉玛依城市超级智能体落地:智慧政务从“上云”到“全域智能”的跃迁路径
人工智能·政务
张彦峰ZYF6 分钟前
LangGraph Tool Calling 入门:从 @tool 到完整调用链
人工智能·大模型·agent·langgraph·tool calling
爱上纯净的蓝天7 分钟前
30 分钟上手 AtomCode:用它写一个 Python 批量整理文件/改名/生成报告小工具(新手教程)
python·开源·自动化脚本·atomcode·ai 编码助手
郝学胜-神的一滴7 分钟前
力扣 662 :二叉树最大宽度
java·数据结构·c++·python·算法·leetcode·职场和发展
2301_764441339 分钟前
基于Stackelberg博弈的分散式库存模型
python·算法·数学建模
半亩码田9 分钟前
06.01-06.07 AI大事件速览 | 扣子3.0、Hinton警告AI有意识、千问3.7-Plus
人工智能
MacroZheng10 分钟前
这款DeepSeek V4终端编程神器,在GitHub上火了!
人工智能·后端·deepseek
圣殿骑士-Khtangc10 分钟前
多智能体协作架构实战:从单 Agent 到 Agent Swarm 的范式跃迁
人工智能