HDF5 C++ 接口:编写动态二维数组

2023-12-29

我正在使用HDF5 C++ API http://www.hdfgroup.org/HDF5/doc/cpplus_RM/index.html写入二维数组数据集文件。 HDF 集团拥有一个创建的例子 ftp://ftp.hdfgroup.org/HDF5/current/src/unpacked/c++/examples/create.cpp来自静态定义的数组大小的 HDF5 文件,我对其进行了修改以满足下面的需求。但是,我需要一个动态数组,其中两者NX and NY在运行时确定。我发现了使用“new”关键字创建二维数组的另一种解决方案 https://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-using-new帮助创建动态数组。这是我所拥有的:

#include "StdAfx.h"
#include "H5Cpp.h"
using namespace H5;

const H5std_string FILE_NAME("C:\\SDS.h5");
const H5std_string DATASET_NAME("FloatArray");
const int NX = 5; // dataset dimensions
const int NY = 6;

int main (void)
{
    // Create a 2D array using "new" method
    double **data = new double*[NX];
    for (int j = 0; j < NX; j++)         // 0 1 2 3 4 5
    {                                    // 1 2 3 4 5 6
        data[j] = new double[NY];        // 2 3 4 5 6 7
        for (int i = 0; i < NY; i++)     // 3 4 5 6 7 8
            data[j][i] = (float)(i + j); // 4 5 6 7 8 9
    }

    // Create HDF5 file and dataset
    H5File file(FILE_NAME, H5F_ACC_TRUNC);
    hsize_t dimsf[2] = {NX, NY};
    DataSpace dataspace(2, dimsf);
    DataSet dataset = file.createDataSet(DATASET_NAME, PredType::NATIVE_DOUBLE,
                                            dataspace);
    // Attempt to write data to HDF5 file
    dataset.write(data, PredType::NATIVE_DOUBLE);

    // Clean up
    for(int j = 0; j < NX; j++)
        delete [] data[j];
    delete [] data;
    return 0;
}

然而,生成的文件并不符合预期(输出来自hdf5dump http://www.hdfgroup.org/HDF5/doc/RM/Tools.html#Tools-Dump):

HDF5 "SDS.h5" {
GROUP "/" {
   DATASET "FloatArray" {
      DATATYPE  H5T_IEEE_F64LE
      DATASPACE  SIMPLE { ( 5, 6 ) / ( 5, 6 ) }
      DATA {
      (0,0): 4.76465e-307, 4.76541e-307, -7.84591e+298, -2.53017e-098, 0,
      (0,5): 3.8981e-308,
      (1,0): 4.76454e-307, 0, 2.122e-314, -7.84591e+298, 0, 1,
      (2,0): 2, 3, 4, 5, -2.53017e-098, -2.65698e+303,
      (3,0): 0, 3.89814e-308, 4.76492e-307, 0, 2.122e-314, -7.84591e+298,
      (4,0): 1, 2, 3, 4, 5, 6
      }
   }
}
}

问题源于二维数组的创建方式(因为此示例使用静态数组方法可以正常工作)。据我了解此电子邮件线程 http://mail.hdfgroup.org/pipermail/hdf-forum_hdfgroup.org/2008-June/001118.html:

HDF5 库期望元素的连续数组,而不是 指向较低维度元素的指针

由于我对 C++/HDF5 相当陌生,因此我不确定如何在运行时创建一个动态大小的数组,该数组是一个连续的元素数组。我不想执行电子邮件线程中描述的更复杂的“hyperslab”方法,因为这看起来过于复杂。任何帮助表示赞赏。


好吧,我对 HDF5 一无所知,但是可以使用大小为 1D 的数组来模拟具有连续缓冲区的 C++ 动态 2D 数组NX * NY。例如:

分配:

double *data = new double[NX*NY];

元素访问:

 data[j*NY + i]

(代替data[j][i])

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

HDF5 C++ 接口:编写动态二维数组 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲

随机推荐

  • 如何随机化列表并迭代随机列表(bash)

    我编写了一个小 bash 脚本 用于读取文本文件中的命令 每行一个 目前 脚本 如下所示 正在按顺序执行命令 即按照文件中输入的顺序 我希望帮助修改下面的脚本 以便它将命令读入数组 然后在迭代随机列表之前随机化该数组 即列表 这是我到目前为
  • java.io.IOException 已建立的连接被主机中的软件中止[重复]

    这个问题在这里已经有答案了 当我对远程服务器执行一个 servlet 调用时 我经常收到此错误 运行 java application1 用很少的数据调用 application2 的 servlet 调用 应用程序 2 必须返回一些数据
  • 在代码隐藏中创建样式

    有谁知道如何在代码隐藏中创建 wpf 样式 我在网络或 MSDN 文档上找不到任何内容 我已经尝试过这个但它不起作用 Style s new Style typeof TextBlock s RegisterName Foreground
  • 如何使用 POST 方法发送 pandas 数据帧并在 Hug/其他 REST API 框架中接收它? pickle.loads 发送后无法取消pickle

    如何使用发送 pandas DataFramePOST method 例如 以下拥抱服务器 http www hug rest 听一个POST使用 pickled pandas DataFrame 请求并响应 import hug impo
  • 如何通过切片范围有效索引一维 numpy 数组

    我有一个大的一维数据数组 我有一个starts发生重要事件的数据的索引数组 我想获得一个范围数组 以便获得长度的窗口L 每个起始点一个starts 虚假样本数据 data np linspace 0 10 50 starts np arra
  • Spring Boot中获取请求头

    如何从调用我的 Springboot 应用程序的应用程序获取当前请求的标头和正文 我需要提取这些信息 不幸的是这不起作用 我尝试使用此代码示例获取当前请求 https stackoverflow com a 26323545 5762515
  • 使用 SwiftUI 将单个引脚添加到 Mapkit

    如何使用 Xcode 11 GM SwiftUI 在地图上添加简单的图钉 我的代码如下 这里显示了以坐标为中心的地图 但我只想显示其他坐标的一个引脚 import SwiftUI import MapKit struct ContentVi
  • iOS:使用 Swift 修剪音频文件?

    我必须将音频文件和录制的语音合并 例如录制的语音是47秒 我必须将 4 分钟的音频歌曲剪切或修剪到 47 秒 并合并音频文件 var url NSURL if self audioRecorder nil url self audioRec
  • 访问器属性错误:无法重新定义不可配置的属性“状态”

    我正在尝试定义一个对象并创建一个访问器属性 for it HTML
  • Java 中的泛型是什么? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我真的不明白泛型的意义 它们有什么作
  • 使用 bash 脚本设置 java ProcessBuilder 环境

    我一直在使用 ProcessBuilder 成功调用具有各种环境变量的进程env put VAR value 现在我想获取一些 bash 脚本来设置一大堆在 java 中未预先确定的环境变量 有人知道一个简单的方法来做到这一点吗 bash支
  • 如果未填写表单字段,则阻止表单提交

    我有这个代码
  • 鉴于我已经实现了基本的正则表达式匹配器,如何实现词法分析器?

    我正在尝试实现一个词法分析器来娱乐 我已经实现了一个基本的正则表达式匹配器 首先将模式转换为 NFA 然后转换为 DFA 现在我对如何继续一无所知 我的词法分析器将获取令牌列表及其相应的正则表达式 用于创建词法分析器的通用算法是什么 我考虑
  • 动态张量对齐/裁剪

    我在 TensorFlow 上实现了全卷积网络 它使用编码器 解码器结构 训练时 我始终使用相同的图像大小 224x224 使用随机裁剪 并且一切正常 在干扰阶段 我想一次预测一张图像 因为我想使用全图像 未裁剪 例如 这样的图像有大小 4
  • 如何从Delphi函数返回数组?

    我的应用程序中有一个函数需要返回一个数组 我在几个地方找到了如何通过声明数组类型来做到这一点 例如 type TStringArray array of string 然后声明我的函数 function SomeFunction SomeP
  • 无法使用python编辑hosts文件

    我正在尝试编写一个 python 脚本 它可以根据一天中的时间阻止网站 但我无法在 Windows 中编辑主机文件 即使以管理员身份运行 cmd 也是如此 这是代码 import time from datetime import date
  • 覆盖基本 localized.strings 文件

    有没有一种方法可以为项目中的多个目标提供一个基本 localized strings 文件 并且为每个目标提供第二个 localized string 文件 该文件将覆盖单个值并将其附加到基本文件中 EDIT 我希望我的应用程序有两个 st
  • 如何使用libgit2获取单个文件的差异?

    是否有一个函数相当于git diff FILE in libgit2 换句话说 如何有效地检索 a 的差异single文件没有libgit2查看工作目录中的其他文件 git diff FILE将显示您相对于索引所做的更改 这可以通过使用 l
  • 括号内的 Swift 类型

    今天我在玩 Swift 一些奇怪的类型开始出现 let flip Int random 2 or arc4random or rand whatever you prefer 如果我输入flip进入 Xcode 6 Beta 2 自动完成会
  • HDF5 C++ 接口:编写动态二维数组

    我正在使用HDF5 C API http www hdfgroup org HDF5 doc cpplus RM index html写入二维数组数据集文件 HDF 集团拥有一个创建的例子 ftp ftp hdfgroup org HDF5