Matlab HDF5:读取维度列表属性
我正在尝试用Matlab读取HDF5文件。我用Fortran创建了这些文件,这只与我使用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
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
)的输出来实际获取刻度数据。对于如何处理属性数据,这个问题相当沉默。有人知道如何正确处理属性引用数据吗