问题标签 [hdf5]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
4998 浏览

c++ - 为非 POD 类型寻找类似于 offsetof() 的东西

我正在寻找一种方法来获取具有非 POD 性质的 C++ 类的数据成员的偏移量。

原因如下:

我想以HDF5格式存储数据,这似乎最适合我的材料(数值模拟输出),但它可能是一个相当面向 C 的库。我想通过 C++ 接口使用它,这需要我像这样声明存储类型(遵循此处此处的文档(第 4.3.2.1.1 节)):

其中 HOFFSET 是一个使用 offsetof 的特定于 HDF 的宏。

问题当然是,一旦示例类变得更有特色,它就不再是 POD 类型的,因此使用 offsetof 将给出未定义的结果。

我能想到的唯一解决方法是首先将要存储的数据导出到更简单的结构,然后将其传递给 HDF。然而,这确实涉及数据复制,这正是 HDF 试图避免的(以及为什么他们有这个 CompType 使库能够访问您的对象以将其数据保存到文件)。

所以我希望你有更好的想法。理想情况下,我会为这个问题寻找一种可移植的解决方法,但如果没有的话,你可以给我一个可以在 x86 和 x86_64 上使用 GCC 的想法,我已经非常感激了。

----- 稍后附加: -----

Greg Hewgill 在下面建议将数据存储在一个简单的结构中,然后通过继承来构建实际的类。特别是对于 HDF,我认为这实际上可能行不通。比上面更复杂的使用场景:

现在,当我们存储 that_uses_derived_non_pod 类的实例时,我们无法描述它的内存布局,就好像它有一个 base_pod 作为 member_c。这会使偏移量出错,因为 derived_non_pod 添加了一些时髦的东西(我猜是虚拟函数表?)。

0 投票
2 回答
8539 浏览

c++ - 删除或更新 HDF5 中的数据集?

我想以编程方式更改与 HDF5 文件中的数据集关联的数据。我似乎找不到按名称删除数据集(允许我使用修改后的数据再次添加它)或按名称更新数据集的方法。我正在使用 HDF5 1.6.x 的 C API,但指向任何 HDF5 API 的指针都会很有用。

0 投票
2 回答
13094 浏览

database - 评估 HDF5:HDF5 为数据建模提供了哪些限制/功能?

我们正在评估用于存储在分析 C/C++ 代码期间收集的数据的技术。在 C++ 的情况下,数据量可能比较大,每个 TU 约 20Mb。

阅读以下 SO答案后,我认为HDF5可能是适合我们使用的技术。我想知道这里的人是否可以帮助我回答我最初遇到的一些问题:

  1. 表现。数据的一般用法是写入一次并读取“多次”,类似于编译器生成的“.o”文件的生命周期。HDF5 与使用 SQLite DB 之类的东西相比如何?这甚至是一个合理的比较吗?

  2. 随着时间的推移,我们将添加到我们正在存储的信息中,但不一定要重新分发一组全新的“阅读器”来支持新格式。阅读用户指南后,我了解到 HDF5 类似于 XML 或 DB,因为该信息与标签/列相关联,因此为读取旧结构而构建的工具只会忽略它不关心的字段?我对此的理解正确吗?

  3. 我们希望写出的大部分信息将是一种树型结构:作用域层次结构、类型层次结构等。理想情况下,我们会将作用域建模为具有父级、子级等。是否可以有一个 HDF5 对象“点”给另一个?如果没有,是否有使用 HDF5 解决此问题的标准技术?或者,正如数据库所要求的那样,我们是否需要一个唯一的键来在搜索数据时通过适当的查找将一个对象“链接”到另一个对象?

非常感谢!

0 投票
8 回答
10317 浏览

c++ - 如何最好地将 std::vector < std::string > 容器写入 HDF5 数据集?

给定一个字符串向量,将它们写入 HDF5 数据集的最佳方法是什么?目前我正在做类似以下的事情:

至少,我真的很想更改上述内容,以便:

  1. 它使用可变长度字符串
  2. 我不需要临时容器

我对如何存储数据没有任何限制,例如,如果有更好的方法,它不必是COMPOUND数据类型。

编辑: 只是为了缩小问题的范围,我对在 C++ 端处理数据比较熟悉,在 HDF5 端我需要大部分帮助。

谢谢你的帮助。

0 投票
7 回答
24453 浏览

hdf5 - 对 NetCDF 与 HDF5 存储科学数据的看法?

那里的任何人都有足够的使用 NetCDF 和 HDF5 的经验来提供一些关于它们作为存储科学数据的方式的优点/缺点?

我使用过 HDF5 并且想通过 Java 读/写,但该接口本质上是 C 库的包装器,我发现这很令人困惑,所以 NetCDF 看起来很有趣,但我对此几乎一无所知。

编辑:我的应用程序“仅”用于数据记录,因此我得到一个具有自描述格式的文件。对我来说重要的功能是能够添加任意元数据,具有快速写入访问以附加到字节数组,并具有单写入器/多读取器并发(强烈推荐但不是必须的。NetCDF 文档说他们有 SWMR 但不要'不要说他们是否支持任何机制来确保两个作者不能同时打开同一个文件并导致灾难性的结果)。我喜欢 HDF5 的层次结构方面(特别是我喜欢有向无环图层次结构,比“常规”文件系统类层次结构更灵活),现在正在阅读 NetCDF 文档......如果它只允许每个数据集文件,那么它可能对我不起作用。:(

更新— 看起来NetCDF-Java从 netCDF-4 文件读取,但只从不支持分层组的 netCDF-3 文件写入。该死。

2009 年 7 月 14 日更新:我开始对 Java 中的 HDF5 感到非常不安。可用的库不是很好,它有一些与 Java 的抽象层(复合数据类型)有关的主要绊脚石。C 的一个很好的文件格式,但看起来我只是输了。>:(

0 投票
2 回答
9518 浏览

hdf5 - 从 HDF5 文件中删除数据

我有一个 HDF5 文件,其中包含复合元素的一维 (N x 1) 数据集——实际上它是一个时间序列。数据首先离线收集到 HFD5 文件中,然后进行分析。在分析过程中,大多数数据被证明是无趣的,只有部分数据是有趣的。由于数据集可能非常大,我想去掉不感兴趣的元素,同时保留有趣的元素。例如,保留 500 个元素数据集的 0-100 和 200-300 和 350-400 元素,转储其余元素。但是怎么做?

有人对如何使用 HDF5 完成此任务有经验吗?显然,它可以通过多种方式完成,至少:

  • (明显的解决方案),创建一个新的文件并在其中逐个元素地写入必要的数据。然后删除旧文件。
  • 或者,在旧文件中,创建一个新的新数据集,在其中写入必要的数据,使用 H5Gunlink() 取消链接旧数据集,并通过 h5repack 运行文件来摆脱无人认领的可用空间。
  • 或者,将现有数据集中的感兴趣元素移向起始位置(例如,将元素 200-300 移动到位置 101-201,将元素 350-400 移动到位置 202-252)。然后调用 H5Dset_extent() 来减小数据集的大小。然后可能会运行 h5repack 以释放可用空间。

由于即使删除了无趣的元素,文件也可能非常大,我宁愿不重写它们(这需要很长时间),但似乎需要实际释放可用空间。来自 HDF5 专家的任何提示?

0 投票
4 回答
895 浏览

c# - 分层.Net文件格式?

我们公司一直在研究一种文件格式来保存大量实验室传感器数据。每次他们运行仪器时,它都会生成一个文件,我们使用该文件并将其存储在数据库中以进行趋势分析等。分层格式是首选,因为它允许我们“分组”数据。这是我们将数据放入数据库之前的中间文件格式。由于我们的开发环境,这是我们的优先级列表:

1) .Net 兼容。该 API 将用于 Web 服务和客户端应用程序。我们无法控制客户的环境,因此最好使用 pure.Net 解决方案。

2) 读取速度。我们的读取是随机的,而不是顺序的。越快越好。如果我们不是 C# 开发商店,我会说速度是第一。

3) 文件大小。如果文件本身很大,则需要良好的压缩率(86% 或更高)。

4) 读取的内存占用。由于数据量大,我们不能简单地读取它。每个传感器都有一个时间/值对。这可以生成超过 400 万对。这为我们消除了 XML。

我们目前查看了HDF5,发现 .NET 领域非常缺乏 API,无法提供 Web 服务,但具有我们正在寻找的大小/速度。我也研究了JSON,它看起来很有希望,但我还没有尝试读回一段数据。我在网上搜索并没有找到很多满足我们需要的文件格式。任何帮助表示赞赏。

0 投票
1 回答
899 浏览

hdf5 - 分块 HDF5 数据集和slabsize

我们正在评估 HDF5 在分块数据集方面的性能。特别是我们试图弄清楚是否可以跨不同的连续块进行读取,以及这样做会如何影响性能?例如,我们有一个块大小为 10 的数据集,一个具有 100 个值的数据集,并且想要读取 23 到 48 的值。会不会有很大的性能损失?

非常感谢!

0 投票
3 回答
3736 浏览

java-native-interface - JNI 性能

我们的主程序是用 java 编写的,但从存储中提取数据的代码是用 C 编写的。我需要从提取的数据中构建一个 HDF5 文件。使用JNI调用C代码获取数据然后从Java构建HDF5文件还是从C代码构建HDF5更好?

我对 JNI 或 C 的经验很少。

此外,我们的主要标准之一是性能。使用 JNI 对性能有多大影响?

0 投票
4 回答
11800 浏览

search - 搜索 HDF5 数据集

我目前正在探索HDF5。我已经阅读了“评估 HDF5 ”线程中的有趣评论,并且我知道 HDF5 是存储数据的首选解决方案,但是您如何查询它呢?例如,假设我有一个包含一些标识符的大文件:有没有办法快速知道文件中是否存在给定的标识符?