当前位置: 首页 > news >正文

【生物信息】如何使用 h5py 读取 HDF5 格式文件中的数据并将其转换为 NumPy 数组

data_mat = h5py.File(args.data_file)

x1 = np.array(data_mat['X1'])

x2 = np.array(data_mat['X2'])

if not args.no_labels:

    y = np.array(data_mat['Y'])

data_mat.close()

这段代码展示了如何使用 h5py 读取 HDF5 格式文件中的数据并将其转换为 NumPy 数组。以下是代码的详细解释:


代码解析

  1. data_mat = h5py.File(args.data_file)
    打开 HDF5 文件:

    • args.data_file 是存储 HDF5 文件路径的变量(通常通过命令行参数传递)。
    • h5py.File() 打开文件以便访问其内容。默认模式是只读 'r'
    • 返回的 data_mat 是一个类似字典的对象,包含 HDF5 文件中的所有数据。
  2. x1 = np.array(data_mat['X1'])
    从 HDF5 文件中读取数据:

    • 访问键 'X1' 对应的数据集,将其转换为 NumPy 数组。
    • 读取后的数据可以用于后续计算或模型训练。
  3. x2 = np.array(data_mat['X2'])
    同样读取键 'X2' 对应的数据集,并转换为 NumPy 数组。

  4. if not args.no_labels:
    检查是否需要读取标签:

    • args.no_labels 是一个布尔参数,通常从命令行传递,用来指示是否存在标签数据。
    • 如果没有 no_labels 参数(即值为 False),执行读取标签的代码。
  5. y = np.array(data_mat['Y'])
    如果需要标签数据,读取键 'Y' 对应的数据集,并转换为 NumPy 数组。

  6. data_mat.close()
    关闭 HDF5 文件:

    • 文件使用完毕后应关闭,释放系统资源。
    • 如果使用 with h5py.File(...) 语句,可以自动管理文件关闭。

假设文件内容

假设 HDF5 文件 的内容如下:

data_file.h5
├── X1 (数据集)
├── X2 (数据集)
└── Y  (标签,数据集)

示例输入文件和命令

HDF5 文件生成
import h5py
import numpy as npwith h5py.File('data_file.h5', 'w') as f:f.create_dataset('X1', data=np.random.rand(100, 10))  # 100x10 的随机数据f.create_dataset('X2', data=np.random.rand(100, 20))  # 100x20 的随机数据f.create_dataset('Y', data=np.random.randint(0, 2, size=(100,)))  # 0 或 1 的随机标签
命令行参数示例
python script.py --data_file data_file.h5 --no_labels False

注意事项

  1. 错误处理

    • 如果文件路径无效或数据集名称不存在,会抛出异常。可以通过 try-except 块处理。
  2. 文件关闭

    • 建议使用 with h5py.File(...) 语句管理文件资源,确保即使发生异常也能正确关闭文件。
  3. 数据集类型

    • 如果数据集不是标准的数值数组,需检查数据类型并进行适当处理。

最近在看单细胞多组学数据,可以用这种方法进行简单的数据读取

http://www.lryc.cn/news/517660.html

相关文章:

  • 纯手工(不基于maven的pom.xml、Web容器)连接MySQL数据库的详细过程(Java Web学习笔记)
  • thingsboard通过mqtt设备连接及数据交互---记录一次问题--1883端口没开,到服务器控制面板中打开安全组1883端口
  • 联邦学习中的LoRA:FedLoRA
  • PyTorch reshape函数介绍
  • Linux内核 -- 邮箱子系统之`mbox_controller` 的 `txdone_irq` 用法
  • Linux/Ubuntu/银河麒麟 arm64 飞腾FT2000 下使用 arm64版本 linuxdeployqt 打包Qt程序
  • Excel | 空格分隔的行怎么导入excel?
  • 如何将某两个提交去掉父提交的合并
  • Windows下安装最新版的OpenSSL,并解决OpenSSL不是当前版本的问题,或者安装不正确的问题
  • Django 社团管理系统的设计与实现
  • android compose 串口通信
  • Cursor无限续杯——解决Too many free trials.
  • 网络传输层TCP协议
  • 我的前端面试笔记(React篇)
  • Qt 5.14.2 学习记录 —— 팔 QWidget 常用控件(3)
  • HTTP协议和WebSocket协议
  • 校园网断网自检测重链接
  • LAMP搭建
  • Sentinel-5P遥感数据下载及预处理教程【20250105】
  • 手写@MapperScan
  • 【C++】深入理解迭代器(Iterator)
  • 后端Java开发:第十二天
  • 记录一下Coding一直不能clone
  • LLM加速方法,Adapter Tuning和Prompt Tuning的区别及原理举例
  • 【SVN】版本发布快捷操作
  • GitLab 创建项目、删除项目
  • STM32-笔记37-吸烟室管控系统项目
  • VisionPro软件Image Stitch拼接算法
  • 【从零开始入门unity游戏开发之——unity篇09】unity6基础入门——Unity游戏对象和组件的本质、Unity中的反射机制
  • 【Linux】深入理解文件系统(超详细)