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

在Julia中调整HDF5数据集的大小,julia,hdf5,Julia,Hdf5,有没有办法使用Julia的HDF5.jl调整HDF5中分块数据集的大小?我没有在文档中看到任何东西。查看源代码,我只找到了set\u dims!(),但这无法扩展数据集(仅收缩数据集)。HDF5.jl是否能够放大现有(分块)数据集?这对我来说是一个非常重要的功能,我不想调用另一种语言。我相信我已经解决了这个问题。问题是我忘了给数据空间一个足够大的max_dims。这样做需要深入研究较低级别的API。我找到的解决办法是: dspace = HDF5.dataspace((6,20)::Dims,

有没有办法使用Julia的HDF5.jl调整HDF5中分块数据集的大小?我没有在文档中看到任何东西。查看源代码,我只找到了
set\u 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\u变暗函数正确调整数据集的大小

我想我找到了API的一些小问题,我必须在本地版本中解决或更改这些问题。关于这些,我将与HDF5.jl的所有者联系。有兴趣的人士:

  • 常量
    H5S\u UNLIMITED
    的类型是
    Uint64
    ,但是
    dataspace
    函数将只接受
    Int64
    的元组,因此为什么我在
    max\u dims
    中使用
    typemax(Int64)
    来模拟
    H5S\u UNLIMITED
    的派生方式
  • 我使用的
    d_create
    形式调用了
    h5d_create
    错误;它通过
    parent
    而不是
    checkvalid(parent).id
    (可以通过与其他形式的
    d\u 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] 

我看到我的问题被否决了。我怀疑这意味着我违反了一些社区准则,但如果我知道什么,我可能不会违反该准则。如果有人让我知道我的问题出了什么问题,我很乐意把它修改得更恰当。这是一个很好的例子,说明为什么下层选民总是至少应该考虑添加一个解释下注的评论(或者对现有的解释评论进行投票)。这个问题对我来说很合理,我会把你的票数提高到零。我最好的猜测是,落选选民的理由是“你尝试过什么”的变体?但是,事实上,您已经阅读了文档并引用了
set_dims!()
足以让我满意,您在发布之前已经尝试回答了自己的问题。另外,在回答问题时:您知道HDF5库中的哪个函数可以满足您的需要吗@Thool将该库中的大多数常用函数包装在HDF5.jl包中,但并非所有函数都导出(或记录),即需要使用
HDF5.FunctionName
调用它们。如果您想要的函数没有被包装,那么您可以尝试提交一个拉请求,尽管准备好了响应可能是“没有空闲的时间,请尝试自己实现包装”。出于各种原因,我正在致力于将C++代码改编成朱丽亚。C++的方法是数据集::扩展。正如@colin建议的那样,试试
HDF5.h5d\u set\u extent()