在Julia中调整HDF5数据集的大小

时间:2015-06-16 18:50:14

标签: julia hdf5

有没有办法使用Julia的HDF5.jl调整HDF5中的分块数据集?我在文档中没有看到任何内容。浏览源代码,我发现的只有set_dims!(),但是无法扩展数据集(仅缩小它)。 HDF5.jl是否能够放大现有(分块)数据集?对我来说这是一个非常重要的功能,我宁愿不必再使用另一种语言。

2 个答案:

答案 0 :(得分:2)

我相信我已经明白了。问题是我忘了给数据空间足够大的max_dims。这样做需要深入了解更低级别的API。我找到的解决方案是:

dspace = HDF5.dataspace((6,20)::Dims, max_dims=(6,typemax(Int64)))
dtype = HDF5.datatype(Float64)
dset = HDF5.d_create(prt, "trajectory", dtype, dspace, "chunk", (6,10))

创建可以适当调整大小的数据集后,set_dims!函数会正确调整数据集的大小。

我认为我找到了API的一些小问题,我必须解决这个问题或更改我的本地版本。我将与HDF5.jl所有者联系。对于那些感兴趣的人:

  • 常量H5S_UNLIMITED的类型为Uint64,但dataspace函数只接受Int64的元组,因此我将typemax(Int64)用于max_dims {1}}模仿H5S_UNLIMITED的派生方式。
  • 我使用的d_create形式错误地调用h5d_create;它通过parent而不是checkvalid(parent).id(可以通过与其他形式的d_create进行比较来看到)。

答案 1 :(得分:2)

文档简要提及hdf5.md摘录中的可扩展维度。

您可以使用可扩展尺寸

d = d_create(parent, name, dtype, (dims, max_dims), "chunk", (chunk_dims), [lcpl, dcpl, dapl])
set_dims!(d, new_dims)

其中dims是整数元组。例如

b = d_create(fid, "b", Int, ((1000,),(-1,)), "chunk", (100,)) #-1 is equivalent to typemax(Hsize)
set_dims!(b, (10000,))
b[1:10000] = [1:10000]