我正在尝试更新hdf5文件中1组中的7个数据集,但更新的数据集的大小尺寸与原始尺寸不同(但是相同的维度,即1D,2D和3D)。有没有办法改变维度属性以更新数据集?或者,我可以删除以前的组,然后在其中创建一个新组吗?我宁愿不重建整个h5文件(创建文件,创建组,创建数据集),因为它相当复杂。
我正在使用R。
中的Bioconductorrhdf5
包
示例数据:
# load package from bioconductor
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
library(rhdf5)
# create new h5 file and populate
created = h5createFile('example.h5')
created = h5createGroup('example.h5','foo')
h5write(matrix(1:10, nr=5, nc=2), 'example.h5', 'foo/A')
# updating dataset with data of same dimension is successful
h5write(matrix(11:20, nr= 5, nc = 2), 'example.h5', 'foo/A')
# updating dataset with data of different dimension fails
h5write(matrix(1:12, nr= 6, nc = 2), 'example.h5', 'foo/A')
注意:我以前读过hdf5文件中的数据,但这是我第一次将数据写回文件中,所以这可能是一种天真的期望。
答案 0 :(得分:1)
不幸的是,HDF5数据集的最大大小在创建时是固定的,之后无法增加。您将不得不重新创建至少要扩展的数据集。
HDF5确实允许你删除"一个数据集,但这只涉及取消链接,即它变得无法访问,但空间不被回收。但是,rhdf5
似乎没有为此提供接口。熟悉rhdf5
的人可能会帮助你。
您可以使用
在rhdf5
中设置最大尺寸
h5createDataset('example.h5', 'foo/A', c(10), maxdims=c(12))
来自rhdf5 reference manual(PDF)。如果你想要一个无限制的maxdims,它需要更多一些:首先你必须使用HDF5常量创建一个数据空间并使用它来创建你的数据集。
答案 1 :(得分:0)
请注意,如果要将数据集更改为较小数据集,则可以这样做。您可以使用2.11.4版以上的函数“ h5set_extent”。see documentation