返回介绍

4.2 分块存储

发布于 2024-01-25 22:02:55 字数 1214 浏览 0 评论 0 收藏 0

有什么办法可以帮助我们解决这个问题?在保留数据集形状(这在语义上很重要)的同时又能告诉HDF5对64×64的像素块进行访问优化?

这就是HDF5分块存储的用途。它允许你指定最适合你访问模式的N维形状。当需要对磁盘写入数据时,HDF5将数据分成指定形状的块,然后将它们扁平地写入磁盘。这些块被存在文件的各地,其坐标由一个B树索引。

让我们以上面的(100, 480, 640)形状的数据集为例。为了告诉HDF5将其分块存储,我们需要为create_dataset方法提供一个新的关键字chunks:

和数据集的类型一样,这个分块形状的值在数据集创建时就被固定且无法更改。你可以检查chunks属性来查看分块形状。如果它是None,意味着数据集并没有使用分块存储:

这个分块形状的维度始终和数据集形状一致,在本例是3。让我们像之前一样重复切片64×64像素块:

图4-2显示了背后的处理机制。好多了,这次只需要一个分块。HDF5从磁盘上找到一个连续的大块并读取。

图4-2 HDF5分块树

更棒的是分块数据以固定大小的字节包存储,让你可以在读写文件时进行各种操作。比如,HDF5压缩功能就在读写文件时利用了这一点,数据以块的形式被输入压缩器和解压器。这种HDF5过滤器(见44页,过滤器和压缩)对上层读取的应用程序来说是完全透明的。

记住,分块只是存储上面的细节。你不需要在读写一个分块数据集时做任何特别的事,只需要使用NumPy风格的切片操作。HDF5会帮你搞定存储。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文