返回介绍

8.3 命名类型

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

HDF5还有另外一种“链接”的概念,比对象引用或区域引用更难以理解。我们已经在创建数据集(或特征)时见过,它是一种固定的数据类型。让我们来看个例子,假设我们的文件中有很多数据集包含图像数据,而你想要确保每个数据集都具有完全相同的类型。

HDF5提供了这样一种解决方案来保证这一点,它允许你在文件中独立于任何数据集或特征地保存一种数据类型。当你调用create_dataset时,你可以提供这一存储的类型而HDF5会将这个类型和新建的数据集建立“链接”。

8.3.1 数据类型对象

你可以简单地将一个NumPy的dtype赋给文件中的一个名字,从而创建这样一种独立的“命名”类型:

当我们打开一个命名类型时,我们得到的不是一个dtype,而是另外一种东西:

和数据集对象一样,这个h5py.Datatype对象是一个代理对象,它允许你访问底层的HDF5数据类型。其最显而易见的属性是Datatype.dtype,返回等效的NumPy的dtype对象:

由于它们是文件中的正式对象,所以你还会看到很多其他属性:

它还有.file属性表示其所在的h5py.File实例, .ref属性表示该类型的对象引用,以及各种特征,就跟Dataset和Group对象一样:

提示


 由于技术原因,HDF5命名类型现在被称为已承诺类型。你可能两种说法都听过。对于我们来说,它们指的是同一样东西。

8.3.2 链接命名类型

创建一个使用命名类型对象的数据集或特征很简单,只需要在创建时提供一个Datatype的实例作为其dtype:

当你这样做时,HDF5不会将类型复制进数据集,而是在文件中另外创建了一个命名类型对象的引用。在帮助你保持数据的组织性的同时,还节省了磁盘空间。

至于特征也是一样,你必须在调用create方法时显式提供类型。比如,在根组创建一个使用我们命名类型的特征:

8.3.3 管理命名类型

命名类型一旦创建就不能更改,不过你可以从文件中删除它们:

但是不要耍花招用一个新的、不同的类型替代它。已经被数据集和特征引用的类型信息无法被删除。它将会一直存在,直到所有使用它的数据集和特征都从文件中被删除:

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

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

发布评论

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