HDF5 使用介绍

2023-11-03

1、HDF5介绍

HDF 是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF 是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF 可以表示出科学数据存储和分布的许多必要条件。HDF 被设计为:

  • 自述性:对于一个HDF 文件里的每一个数据对象,有关于该数据的综合信息(元数据)。在没有任何外部信息的情况下,HDF 允许应用程序解释HDF文件的结构和内容。
  • 通用性:许多数据类型都可以被嵌入在一个HDF文件里。例如,通过使用合适的HDF 数据结构,符号、数字和图形数据可以同时存储在一个HDF 文件里。
  • 灵活性:HDF允许用户把相关的数据对象组合在一起,放到一个分层结构中,向数据对象添加描述和标签。它还允许用户把科学数据放到多个HDF 文件里。
  • 扩展性:HDF极易容纳将来新增加的数据模式,容易与其他标准格式兼容。
  • 跨平台性:HDF 是一个与平台无关的文件格式。HDF 文件无需任何转换就可以在不同平台上使用。

(官方介绍:https://support.hdfgroup.org/HDF5/whatishdf5.html)

2、HDF5的文件组织

一个HDF5文件就是一个由两种基本数据对象(groups and datasets)存放多种科学数据的容器:

  • HDF5 group: 包含0个或多个HDF5对象以及支持元数据(metadata)的一个群组结构


  • HDF5 dataset: 数据元素的一个多维数组以及支持元数据(metadata)

3、HDF5软件下载

https://support.hdfgroup.org/HDF5/release/obtain518.html

4、目录结构

下载后解压


  • bin目录是已经编译的好的可执行文件。例如:bin目录下的h5dump可以查看h5文件。
  • include目录是编写代码是需要包含的头文件。
  • lib目录是编译代码时需要连接的库。
  • share目录中是example。

5、 example code

#include<stdio.h>
#include<stdlib.h>
#include <iostream>
#include <string>

#include "H5Cpp.h" //包含HDF5需要的头文件

#ifndef H5_NO_NAMESPACE
using namespace H5;
#ifndef H5_NO_STD
using std::cout;
using std::endl;
#endif  // H5_NO_STD
#endif

const H5std_string FILE_NAME("h5_test.h5");//定义要创建的文件名字
const int RANK = 2; //定义数组的维度
const int M = 3;
const int N = 4;

int main(void)
{
    const H5std_string GROUP_NAME("MyGroup");//定义要创建group的名字
    const H5std_string DATASET_NAME("MyData");//定义要创建dataset的名字
    const H5std_string  ATTR_NAME( "MyAttribute" );//定义要创建数据集属性的名字 

    //准备要存储的数据
    float *data = (float*)malloc(M*N*sizeof(float));
    float *tmp=NULL;
    for(int i =0; i<M; ++i){
        for(int j =0; j<N; ++j){
            tmp = data + i*N +j;
            *tmp = 1.3;
        }
    }
    try
    {
        // Turn off the auto-printing when failure occurs so that we can
        // handle the errors appropriately
        Exception::dontPrint();

        //创建文件
        H5File file(FILE_NAME, H5F_ACC_TRUNC);

        //创建 group
        Group group(file.createGroup(GROUP_NAME));

        //创建数据空间
        hsize_t dims[RANK];               // dataset dimensions
        dims[0] = M;
        dims[1] = N;
        DataSpace *dataspace = new DataSpace (RANK, dims);

        //创建数据集
        DataSet *dataset = new DataSet (group.createDataSet(DATASET_NAME, PredType::NATIVE_FLOAT, *dataspace));

        //将准备好的数据,写到数据集中。
        dataset->write(data, PredType::NATIVE_FLOAT);

        // 创建数据集属性空间.
        int attr_data[2] = { 100, 200};
        hsize_t attr_dims[1] = { 2 };
        DataSpace attr_dataspace = DataSpace (1,attr_dims );

        // 创建数据集的属性.
        Attribute attribute = dataset->createAttribute( ATTR_NAME, PredType::STD_I32BE, attr_dataspace);

        // 写属性.
        attribute.write( PredType::NATIVE_INT, attr_data);

        // 关闭数据空间、数据集、group对象.
        delete dataspace;
        delete dataset;
        group.close();
    }
    
    // catch failure caused by the H5File operations
    catch(FileIException error)
    {
        error.printError();
        return -1;
    }
    // catch failure caused by the DataSpace operations
    catch(DataSpaceIException error)
    {
        error.printError();
        return -1;
    }
    // catch failure caused by the Group operations
    catch(GroupIException error)
    {
        error.printError();
        return -1;
    }
    // catch failure caused by the DataSet operations
    catch(DataSetIException error)
    {
        error.printError();
        return -1;
    }
    return 0;
}

6、编译

g++ example.cpp -o example -I./include -L./lib -lhdf5_cpp

7、执行

./example

生成一个 h5_test.h5文件

8、查看

可是使用bin目录的h5dump 查看 命令

./bin/h5dump h5_test.h5

9、显示结果


(完)


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HDF5 使用介绍 的相关文章

  • 如何将 Pandas Dataframe 写入 HDF5 数据集

    我正在尝试将 Pandas 数据帧中的数据写入嵌套的 hdf5 文件中 每个组内有多个组和数据集 我想将其保留为单个文件 该文件将来每天都会增长 我尝试了以下代码 它显示了我想要实现的目标的结构 import h5py import num
  • 将 hdf5 matlab 字符串加载到 Python 中

    我在使用 Python 读取 hdf5 matlab 7 3 文件时遇到麻烦 我正在使用 h5py 2 0 1 我可以读取文件中存储的所有矩阵 但无法读取字符串列表 h5py 将字符串显示为形状 1 894 类型 04 的数据集 该数据集包
  • 如何降级使用tensorflow-gpu安装的hdf5

    最近我尝试安装tensorflow gpu以下https www youtube com watch v tPq6NIboLSc这个视频 但是当我尝试导入tensorflow 或keras 时 我的内核崩溃并给出以下错误消息 C Users
  • 使用 h5py 打乱 HDF5 数据集

    我有一个很大的 HDF5 文件 30GB 我需要对每个数据集中的条目 沿着 0 轴 进行洗牌 浏览 h5py 文档我也找不到randomAccess or shuffle功能 但我希望我错过了一些东西 有谁足够熟悉 HDF5 来想出一种快速
  • h5py 编写:如何高效地将数百万个 .npy 数组写入 .hdf5 文件?

    我必须将大图像的子样本存储为 npy大小为 20 20 5 的数组 为了在训练分类模型时进行统一采样 我正在寻找一种有效的方法来存储近 1000 万个子样本 以实现这一点 如果我将它们存储为整个图像 则训练期间的采样将不能代表分布 我有存储
  • 通过MATLAB将矩阵数据写入HDF5文件中数据类型的每个成员

    这是我第一次尝试使用低级命令通过 MATLAB 我的问题是 我很难尝试将数据写入数据集上数据类型中的每个特定成员 首先 我创建一个新的 HDF5 文件 并设置正确的组层 new h5 H5F create new hdf5 file h5
  • 将多个 hdf5 文件合并到一个 pytable 中

    我有一些hdf5文件 每个文件都具有相同的结构 我想创建一个pytable通过某种方式合并它们hdf5 files 我的意思是 如果 file1 中的数组的大小为 x 而 file2 中的数组的大小为 y 则结果数组pytable大小为 x
  • 如何将我自己的类对象存储到hdf5中?

    我创建了一个类来保存我的研究的实验结果 我是一名电子工程博士生 例如 class Trial def init self subID triID self filePath file path of the folder self subI
  • 如何使用 C++ API 在 HDF5 文件中创建多值属性

    编辑开始 我正在尝试基于本机类型 float int 创建 对 三元组或 n uplet 属性 浮点对 浮点三元组 浮点属性的 n 元组 int 对 int 三元组 int 属性的 n 元组 我不想创建 数组 属性 也不想创建 复合 属性
  • 使用 vcpkg 安装 Visual Studio 2019、Win10 和 HDF5。未解析的外部符号 H5T_IEEE_F64BE_g

    任何帮助深表感谢 我在 Windows 10 上尝试使用通过 vcpkg 安装的 HDF5 库和 Visual Studio 2019 时遇到链接错误 我使用 vcpkg 在 Windows 10 上安装了 HDF5 1 12 0 电源外壳
  • h5py 中的压缩文件更大

    我正在使用 h5py 从 python 以 HDF5 格式保存 numpy 数组 最近 我尝试应用压缩 但得到的文件大小更大 我从这样的事情 每个文件都有几个数据集 开始 self h5 current frame create datas
  • 使用 h5py 压缩现有文件

    我目前正在开展一个有关 HDF5 数据集压缩的项目 最近开始使用 h5py 我遵循了基本教程 并且能够在创建文件时打开 创建和压缩文件 然而 在压缩现有文件时我一直不成功 这是我工作的目的 我尝试使用 r 打开文件 然后压缩分块数据集 但文
  • 无法重新安装 Python 2.7 的 PyTables

    除了 2 7 之外 我还安装了 Python 2 7 当再次安装 PyTables 2 7 时 我收到此错误 发现已安装 numpy 1 5 1 软件包 错误 找不到本地 HDF5 安装 您可能需要明确说明本地 HDF5 标头和 可以通过设
  • h5py:正确读取 MATLAB 中存储的“表”类的问题 (.mat -7.3)

    我正在尝试使用 h5py 模块在 Python 3 8 中导入 MATLAB mat 7 3 文件 该文件包含一个结构类和table班级 我成功导入了结构类对象 但是 那table导入后类显示错误的尺寸 import h5py Path d
  • 将 Pandas 对象与常规 Python 对象一起存储在 HDF5 中

    熊猫有一个不错的界面 http pandas pydata org pandas docs dev io html有助于将 Dataframes 和 Series 等内容存储在 HDF5 中 random matrix np random
  • 如何在 Debian Linux 系统上以非 root 身份安装 h5py (+numpy+libhdf5+...)

    我需要在 Debian Linux 系统上安装 h5py Python 模块及其所有缺少的依赖项 这项任务因以下原因而变得复杂 我在这个系统上没有任何超级用户权限 没有 sudo 没有 root 密码等 我使用的其余代码需要 Python
  • 将 hdf5 转换为文件夹中组织的原始格式

    我使用脚本使图像与图集匹配 该脚本输入是 raw图像组织在文件夹中 例如 imageFolder folder1 image1 raw image2 raw folder2 image1 raw image2 raw 我有一个图像hdf5我
  • 如何在python中读取Mat v7.3文件?

    我正在尝试阅读以下网站中给出的mat文件 ufldl stanford edu housenumbers 在文件train tar gz中 有一个名为digitStruct mat的mat文件 当我使用 scipy io 读取 mat 文件
  • 如何使用 h5py 保存不同形状的 numpy.arrays 列表?

    我正在使用 h5py 将大型图像数据集 flickr25k 数据集 保存到 hdf5 中 但是图像大小不同 因此我无法创建具有形状的数据集 nb images height width 现在我正在使用多个数据集来处理这个问题 因此creat
  • HDF5 库错误

    我正在使用以下 1 VS 2010 C 2 调试Win 32 3 图书馆从这里 http www hdfgroup org HDF5 release obtain5 html http www hdfgroup org HDF5 relea

随机推荐

  • Unikernels 解读

    转载于https zhuanlan zhihu com p 29053035 Unikernels Beyond Containers to the Next Generation of Cloud是 Russ Pavlicek的一本动物书
  • (Animator详解二)Unity Animator的基本属性

    在Inspector下 Animator的第一项为状态机的名称 注意 这里的名称不是动画名称 Tag 当前动画的Tag标签 可以通过Tag值来处理一些逻辑 Motion 动画片段的名称 Speed 动画的播放速度 1表示正常播放 speed
  • spring一些捞到的东西

    spring指令重排和多线程 原来在编写程序的时候要考虑这么多东西 要想清楚每一个代码 每一个线程在哪执行 还有要懂得jvm 的一些优化的 任重而道远啊 单例模式 只允许一个实例的存在 构造函数是私有的 对外提供获取实例的方法 getIns
  • CSS -网页动画

    目录 制作网页动画 1 CSS变形 2 CSS过渡 3 CSS动画 4 总结 制作网页动画 1 CSS变形 CSS3变形是一些效果的集合 如平移 旋转 缩放 倾斜效果 每个效果都可以称为变形 transform 它们可以分别操控元素发生平移
  • 第七十六篇 MIPI简单说明

    MIPI 移动行业处理器接口 是Mobile Industry Processor Interface的缩写 MIPI是MIPI联盟发起的为移动应用处理器制定的开放标准 目的是把手机内部的接口如摄像头 显示屏接口 射频 基带接口等标准化 从
  • c++之重载函数学习总结

    一 C 中的函数重载 1 函数重载的概念 用同一个函数名定义不同的函数 当函数名和不同的参数搭配时函数的含义不同 注意 在c语言中是没有函数重载这个概念的 代码示例演示 include
  • 用Flutter实现GaiaControl BLE OTA升级功能,支持Android/IOS

    代码基本移植官方GaiaControl Demo 支持RWCP 断点续传 设置蓝牙mtu 协议 这里主要分析GAIA CSR ble ota的过程 协议等等 希望对你有所帮助 这里对蓝牙服务特性订阅都不谈 读者自行了解 Gaia 是CSR
  • DM8锁查询及解决

    锁模拟 session1 与 session2同时对表t2的col1 200的列进行更新 但不提交 session1 SQL gt create table t1 col1 int SQL gt create table t2 col1 i
  • Select For update语句浅析

    Select forupdate语句是我们经常使用手工加锁语句 通常情况下 select语句是不会对数据加锁 妨碍影响其他的DML和DDL操作 同时 在多版本一致读机制的支持下 select语句也不会被其他类型语句所阻碍 借助for upd
  • chi square-卡方分布的定义及性质

    chi square 卡方分布的定义及性质 摘要 2 chi 2 2分布 卡方分布 的定义 g
  • Anchor-Free即插即用

    点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 后台回复 多模态综述 获取论文 后台回复 ECCV2022 获取ECCV2022所有自动驾驶方向论文 后台回复 领域综述 获取自动驾驶全栈近80篇综述论文 Anchor
  • 做什么副业比较靠谱,这五个正规项目,记得收藏

    人这一生不易 每个阶段都会有压力和烦恼 尤其是成年人 上有老下有小的 生活的重担都在一个人身上 压得人喘不过气 生活的方方面面都需要钱 仅靠工资已经很难维持一家人的开支了 所以很多人打算利用业余时间做点副业 来增加收入 可是不知道做什么 哪
  • Roaming\npm\node_modules\nrm\node_modules\open\index.js:38

    nrm1 2 1版本安装遇到的问题 C Users Cwqiang gt nrm ls C Users Cwqiang AppData Roaming npm node modules nrm node modules open index
  • ViewModel 的基本用法

    文章目录 ViewModel简介 ViewModel 的基本用法 向ViewModel传递参数 ViewModel简介 ViewModel 应该算是Jetpack 中最重要的组件之一了 其实Android 平台上之所以会出现注入MVP MV
  • 统一软件开发过程(RUP)分析

    什么是RUP RUP Rational Unified Process 统一软件开发过程 统一软件过程是一个面向对象且基于网络的程序开发方法论 RUP是风险驱动的 基于Use Case技术的 以架构为中心的 迭代的 可配置的软件开发流程 R
  • 谈谈头文件

    一 头文件的定义 C语言中常常使用预处理指令 include 把另一个文件的内容复制到源文件当中 被复制的文件就是头文件 其后缀名为 h 二 头文件的作用 1 在多文件的工程当中 头文件用于全局变量 外部函数的声明 其本身不包含程序的实现代
  • Type Conversion and Function Overloading___CH_8

    8 1 Implicit type conversion coercion What happens when a type conversion is invoked When a type conversion is invoked w
  • 使用Xpose突破安卓App禁止截屏限制

    WindowManager LayoutParams FLAG SECURE标志的app 这里需要注意下支付宝 网上银行类的app不建议拦截 像支付宝里的付款码 商家拿到后 直接就能扣费 不需要用户这边的确认 所以其实这款应用是可以用在多个
  • HNUCM-OJ 1401: 递归求解

    http acm hnucm edu cn JudgeOnline problem php id 1401 题目描述 使用递归编写一个程序 求以下数列的前n项 s 1 1 2 1 3 1 4 1 5 1 6 1 n 输入 多组数据输入 每组
  • HDF5 使用介绍

    1 HDF5介绍 HDF 是用于存储和分发科学数据的一种自我描述 多对象文件格式 HDF 是由美国国家超级计算应用中心 NCSA 创建的 以满足不同群体的科学家在不同工程项目领域之需要 HDF 可以表示出科学数据存储和分布的许多必要条件 H