Matlab HDF5:读取维度列表属性

Matlab HDF5:读取维度列表属性,matlab,attributes,hdf5,Matlab,Attributes,Hdf5,我正在尝试用Matlab读取HDF5文件。我用Fortran创建了这些文件,这只与我使用h5dsattach\u scale\u f将比例数据集附加到给定主数据集的每个维度有关。我的大部分逻辑都工作得很好,但我在读取主要数据集的属性以获取附加的比例时遇到了问题 我首先遍历文件中的每个数据集。一旦我知道我有了我的主数据集,我就用这个调用遍历它的属性: [状态,索引输出,SD]=H5A.迭代(数据集id,'H5索引名称','H5索引本机',0,@hdf5索引属性,SD) 为每个属性调用此函数的: f

我正在尝试用Matlab读取HDF5文件。我用Fortran创建了这些文件,这只与我使用
h5dsattach\u scale\u f
将比例数据集附加到给定主数据集的每个维度有关。我的大部分逻辑都工作得很好,但我在读取主要数据集的属性以获取附加的比例时遇到了问题

我首先遍历文件中的每个数据集。一旦我知道我有了我的主数据集,我就用这个调用遍历它的属性:

[状态,索引输出,SD]=H5A.迭代(数据集id,'H5索引名称','H5索引本机',0,@hdf5索引属性,SD)

为每个属性调用此函数的:

function [status, SD] = hdf5_sds_attr_iter(dset_id, attr_name, info, SD)
    status = 0;
    disp(attr_name);

    if ~strcmp(attr_name, 'DIMENSION_LIST')
        return;
    end
    attr_id = H5A.open(dset_id, attr_name, 'H5P_DEFAULT');

    space = H5A.get_space (attr_id);
    [~, dims, ~] = H5S.get_simple_extent_dims(space);

    info2 = H5A.get_info(attr_id);
    disp(info2);
    rdata = H5A.read(attr_id, 'H5ML_DEFAULT');
    disp(rdata);
    for i = 1:dims
        disp(rdata{i});
    end
    H5S.close(space);
    H5A.close(attr_id);
end
这是输出:

DIMENSION_LIST
     3

    corder_valid: 1
          corder: 0
            cset: 0
       data_size: 48

    [8x1 uint8]
    [8x1 uint8]
    [8x1 uint8]

  184
   17
    0
    0
    0
    0
    0
    0

   32
   28
    0
    0
    0
    0
    0
    0

  240
   29
    0
    0
    0
    0
    0
    0
如果我在数据集上执行转储,则该属性看起来是这样的:

  ATTRIBUTE "DIMENSION_LIST" {
     DATATYPE  H5T_VLEN { H5T_REFERENCE { H5T_STD_REF_OBJECT }}
     DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
     DATA {
     (0): (DATASET 1400 /beamdata scale rank 1 ),
     (1): (DATASET 6512 /beamdata scale rank 2 ),
     (2): (DATASET 6976 /beamdata scale rank 3 )
     }
  }
由于这些数字(140065126976)没有出现在转储文件的其他位置,我不知道如何使用它们或
H5A.read
rdata
)的输出来实际获取刻度数据。对于如何处理属性数据,这个问题相当沉默。有人知道如何正确处理属性引用数据吗