有没有办法使用Julia的HDF5.jl来调整chunked数据集的大小?我在文档中没有找到相关内容。查看源代码,我只发现了set_dims!(),但它不能扩展数据集(只能缩小它)。HDF5.jl是否具有扩展现有(chunked)数据集的能力?这对我来说是非常重要的功能,我不想调用其他语言来实现。
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]
我相信我已经搞清楚了。问题在于我忘记给数据空间分配足够大的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)
来模仿 H5S_UNLIMITED
的导出方式。d_create
形式错误地调用了 h5d_create
;它将 parent
传递给了 checkvalid(parent).id
(通过与其他形式的 d_create
进行比较可以看到)。
set_dims!()
,足以让我满意你在发布问题之前已经尝试回答自己的问题。 - Colin T BowersHDF5.FunctionName
来调用它们。如果你想要的函数没有被打包,那么你可以尝试提交一个 pull request,不过请准备好可能会得到 "目前没有空闲时间,请自己实现" 的回应。 - Colin T BowersH5Dset_extent
函数。正如@colin所建议的,尝试使用HDF5.h5d_set_extent()
如何? - Timothy Brown