【问题标题】:How do I change the data type in an HDF5 file from MATLAB?如何从 MATLAB 更改 HDF5 文件中的数据类型?
【发布时间】:2013-08-02 10:03:57
【问题描述】:

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

【问题讨论】:

    标签: matlab hdf5


    【解决方案1】:

    根据This post 这是一个类似的问题,没有用于删除 HDF5 文件中的数据集的机制。也表示可以Modify in place

    【讨论】:

    • 可以修改数据,但不是数据类型!
    【解决方案2】:

    无法删除数据集或更改其数据类型。来自HDF5 manual的第5.3.2节:

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

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

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

    【讨论】:

    • 谢谢,我将数据复制到一个新文件中。
    猜你喜欢
    • 1970-01-01
    • 2020-03-20
    • 1970-01-01
    • 2019-08-27
    • 2014-09-12
    • 2016-02-10
    • 2013-08-25
    • 2016-03-29
    • 2022-11-17
    相关资源
    最近更新 更多