在 Julia 中调整 HDF5 数据集的大小
Resize HDF5 dataset in Julia
有没有办法使用 Julia 的 HDF5.jl 在 HDF5 中调整分块数据集的大小?我没有在文档中看到任何内容。查看源代码,我发现的只是 set_dims!()
,但这不能扩展数据集(只能缩小它)。 HDF5.jl 是否能够扩大现有(分块)数据集?这对我来说是一个非常重要的功能,我宁愿不必调用另一种语言。
我相信我已经弄明白了。问题是我忘记给数据空间足够大 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
模仿H5S_UNLIMITED
的推导方式。
- 我使用的
d_create
形式错误地调用了 h5d_create
;它通过 parent
而不是 checkvalid(parent).id
(可以通过与其他形式的 d_create
的比较看出)。
文档在下面摘录的 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]
有没有办法使用 Julia 的 HDF5.jl 在 HDF5 中调整分块数据集的大小?我没有在文档中看到任何内容。查看源代码,我发现的只是 set_dims!()
,但这不能扩展数据集(只能缩小它)。 HDF5.jl 是否能够扩大现有(分块)数据集?这对我来说是一个非常重要的功能,我宁愿不必调用另一种语言。
我相信我已经弄明白了。问题是我忘记给数据空间足够大 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
模仿H5S_UNLIMITED
的推导方式。 - 我使用的
d_create
形式错误地调用了h5d_create
;它通过parent
而不是checkvalid(parent).id
(可以通过与其他形式的d_create
的比较看出)。
文档在下面摘录的 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]