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