在Julia中调整HDF5数据集的大小
有没有办法使用Julia的HDF5.jl调整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,
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()
?