我正在将大量小数据集写入HDF5文件,结果的文件大小是我从数据简单列出的期望大小的10倍。我的数据按照以下层次结构组织:
每个子组应该占用 500 * 4 字节 = 2000 字节,忽略开销。我没有存储数据旁边的任何属性。然而,在测试中,我发现每个子组大约占用了 4 kB 的空间,大约是我预期的两倍。我知道有一些开销,但是它来自哪里?如何减少它?它与表示组结构有关吗?
更多信息: 如果我将每个子组中两个数据集的维度增加到 1000 x 4 和 1000,则每个子组占用的空间约为 22,250 字节,而不是我预期的平坦的 20,000 字节。这意味着每个子组的开销为 2.2 kB,并且与较小的数据集大小得到的结果一致。有没有办法减少这种开销?
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,并且与较小的数据集大小得到的结果一致。有没有办法减少这种开销?
COMPACT
设置的。从中得到的教训是要避免将少量数据放在复杂的群组结构中。将所有数据集合并到一个较大的数组中并进行压缩后,我获得了超过1:1的打包比率(压缩节省的空间比HDF5开销增加的空间更多)。 - apdnu