3

我有一个 HDF5 数据文件,其中包含一个 int32 数据值数组。我希望将存储在该数组中的数据更改为具有不同格式(双精度)的不同值。

例如,我可以使用以下内容查询数据类型:

 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 文件中的数据集的函数,但找不到任何参考。有人有想法么?

4

2 回答 2

2

无法删除数据集或更改其数据类型。从HDF5 手册的第 5.3.2 节:

The datatype is set when the dataset is created and can never be changed.

这是由于在 HDF5 文件中分配空间的方式。虽然无法删除数据集(出于相同的原因),但可以“取消链接”并使其无法访问,但这不会回收已用空间。

如果您确实需要更改数据类型,您有两个选择:第一个是取消链接旧数据集并在其位置创建一个新数据集。新数据集可以与旧数据集同名。但是,如果担心空间问题,您可能更愿意创建一个全新的 HDF5 文件,然后将旧数据复制到新文件中。

于 2013-08-02T08:51:30.313 回答
0

根据这篇类似问题的帖子,没有删除 HDF5 文件中的数据集的机制。也表示可以就地修改

于 2013-08-01T13:52:08.870 回答