如何从MATLAB更改HDF5文件中的数据类型?

时间:2013-08-01 12:59:41

标签: matlab hdf5

我有一个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文件中的数据集但无法找到任何引用的函数。有人有什么想法吗?

2 个答案:

答案 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