我有一个HDF5数据文件,其中包含一个int32数据值数组。我希望将存储在该数组中的数据更改为具有不同格式(double)的不同值。
例如,我可以使用以下内容查询数据类型:
finf=h5info('file.hdf5');
finf.Datasets(1).Datatype
ans =
Name: ''
Class: 'H5T_INTEGER'
Type: 'H5T_STD_I32LE'
Size: 4
Attributes: []
如果我尝试在同一节点位置重新创建数据,则会给出以下错误:数据集已存在:
t=double(h5read([filepath filename],'/t'));
% more t calculations here....
h5create('file.hdf5','/t',size(t),'DataType','double');
Error using h5create>create_dataset (line 159)
The dataset '/t' already exists.
Error in h5create (line 69)
create_dataset(options);
我在Matlab文档中查找了删除hdf5文件中的数据集但无法找到任何引用的函数。有人有什么想法吗?
答案 0 :(得分:2)
无法删除数据集或更改其数据类型。来自HDF5 manual的第5.3.2节:
The datatype is set when the dataset is created and can never be changed.
这是由于HDF5文件中的空间分配方式。虽然不可能删除数据集(出于同样的原因),但它可以“取消链接”并且无法访问,但这不会回收已用空间。
如果确实需要更改数据类型,则有两种选择:第一种是取消链接旧数据集并在其位置创建新数据集。新数据集可以与旧数据集同名。但是,如果需要考虑空间,您可能更愿意创建一个全新的HDF5文件,并将旧数据复制到新文件中。
答案 1 :(得分:0)
根据类似问题的This post,没有删除HDF5文件中数据集的机制。它还表明可以Modify in place。