首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HDF5存储开销

HDF5存储开销
EN

Stack Overflow用户
提问于 2013-01-15 14:24:50
回答 1查看 2.9K关注 0票数 8

我正在将大量小型数据集写入一个HDF5文件,生成的文件大小大约是我从输入数据的简单表格中所期望的10倍。我的数据是按如下层次组织的:

代码语言:javascript
复制
group 0
    -> subgroup 0
        -> dataset (dimensions: 100 x 4, datatype: float)
        -> dataset (dimensions: 100, datatype: float)
    -> subgroup 1
        -> dataset (dimensions: 100 x 4, datatype: float)
        -> dataset (dimensions: 100, datatype: float)
    ...
group 1
...

每个子组应占用500 *4字节= 2000字节,忽略开销。我不会将任何属性与数据一起存储。然而,在测试中,我发现每个子组占用了大约4个kB,大约是我预期的两倍。我知道有一些开销,但它来自哪里,我如何减少它?它是在代表群体结构吗?

更多信息:如果我将每个子组中的两个数据集的维度增加到1000 x 4和1000,那么每个子组占用大约22,250个字节,而不是我预期的平面20,000个字节。这意味着每个子组的开销为2.2 kB,并且与我在较小数据集大小下获得的结果一致。有什么方法可以减少这种开销吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 11:05:29

我会回答我自己的问题。仅表示组结构所涉及的开销就足够了,因此存储小数组或拥有许多组(每个组只包含少量数据)是没有意义的。似乎没有任何方法可以减少每个组的开销,我测量的开销大约是2.2 kB。

我通过将每个子组中的两个数据集合并为一个(100 X 5)数据集解决了这个问题。然后,我去掉了子组,并将每个组中的所有数据集合并为一个3D数据集。因此,如果我以前有N个子组,那么现在每个组中都有一个形状为(N X 100 X 5)的数据集。因此,我节省了以前存在的N* 2.2 kB开销。此外,由于HDF5的内置压缩对于更大的数组更有效,我现在得到了比1:1更好的总体压缩比,而以前,开销占用了文件空间的一半,压缩完全无效。

教训是要避免HDF5文件中复杂的组结构,并尝试将尽可能多的数据组合到每个数据集中。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14332193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档