返回介绍

8.2 区域引用

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

区域引用是HDF5最酷的特性之一。它允许你保存一个引用,这个引用指向数据集的某个部分。比如,你可能想要将HDF5文件中储存的某张照片的感兴趣区域(ROI)保存下来,这样,你就可以不必在之后的分析中处理整张照片。

8.2.1 创建和读取区域引用

你可以将区域引用看作是保存了切片访问数据集的参数。以前面创建的数据集为例,我们注意到它有一个属性叫regionref:

我们可以利用这个小小的代理对象保存我们的切片参数。你可以用标准的NumPy切片格式在这个对象上创建一个新的区域引用:

和对象引用一样,区域引用也是不透明的。其唯一可用的属性是shape:

它表示你切片选择的形状。也就是说,如果你将该切片参数应用于你的数据集上,HDF5返回的数组就是这个形状。

一旦你获得一个区域引用,你就可以直接以它为切片参数从数据集中获取数据:

8.2.2 复杂索引

记住,一旦你使用“复杂”索引(如布尔数组),那么shape将永远是1维的。这是为了模仿NumPy在进行此类切片选择时的行为。

假设我们有一个2维数组,它保存了一些随机数:

我们可以创建一个布尔数组表示所有大于0.5的元素:

然后创建一个该数组的区域引用:

一共有4个元素符合条件,所以选择的结果被“打包”成一个具有4个元素的1维数组。

选取元素时遵循某个规则。如果我们将该选择应用于数据集:

我们会看到位于[0,2],[1,2],[2,0],[2,1]的元素被依次选取。这是遵循C语言的顺序:步进首先发生在最后一维的索引,然后依次向前。

提示


 不幸的是基于列表的选择也会返回1维数组,这一点跟NumPy不一样。(尝试一下!)这是HDF5标准库的一个限制。

8.2.3 用区域引用获得数据集

区域引用还有一个用途。如果你有一个区域引用,以上面的形状为(80,)的ref_out为例,你可以将它作为对象引用来获得整个数据集:

也就是说,如果你已经将某个数据集的区域引用保存在一个特征里,就不需要再另外保存该数据集的对象引用。

如果你只关注区域数据而不是数据集本身,你只需要这样做:

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

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

发布评论

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