【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形式
相关推荐
阿里云大数据AI技术几秒前
Daft 多模态视频抽帧性能优化实践:从抽帧到大模型打标,一条视频理解流水线是怎么跑起来的
大数据·人工智能·spark
wuyk5554 分钟前
Python 第三章:列表 List
服务器·开发语言·python
weixin_446260855 分钟前
Wyvern:生成可溯源多模态报告的智能体框架
人工智能
笨鸟先飞,勤能补拙7 分钟前
从预测到决策:人工智能与机器学习的系统方法、工程闭环与现实边界
大数据·人工智能·windows·python·机器学习·密码学
tech讯息12 分钟前
生成式 AI 从 POC 验证迈向正式生产,推理部署环节成为卡点的核心原因是什么?
大数据·人工智能
Aethir13 分钟前
第三章 — 成本与经济模型
大数据·人工智能
燕云少君13 分钟前
你只是跟AI聊聊天,它已经准备好刷你的卡了
人工智能·chatgpt·openai
Java学术趴15 分钟前
我把一上午的表格活,拆成了 TRAE Work 的四步
人工智能
hyuk的AI工坊23 分钟前
从 Demo 到生产:LangChain4j 工程化落地全指南
人工智能
这张生成的图像能检测吗23 分钟前
(论文速读)TADNet:心磁图信号去噪的时间分解和基于注意力的深度学习
人工智能·深度学习·信号处理·信号去噪