我正在尝试使用 hdf5 接口就地修改 mat 文件。
我有一个简单的 mat 文件,其中包含一个大小为 [K x L*M] 的 2D 数组,并希望在不修改数据或数据类型的情况下将其重塑为一个大小为 [K x L x M] 的 3D 数组。通常我会读取数据,执行 val = reshape(val,[K,L,M]); 并将其写回文件。但是我可以通过简单地修改 Dataset Size/MaxSize 属性来实现吗?
这是我到目前为止所拥有的;看起来它应该可以工作,但实际上并没有:
%%
val = rand(4,9);
save('test.mat','val','-v7.3');
h5disp('test.mat');
%%
fid = H5F.open('test.mat','H5F_ACC_RDWR','H5P_DEFAULT');
dset_id = H5D.open(fid,'/val');
space_id = H5D.get_space(dset_id);
H5S.set_extent_simple(space_id,3,fliplr([4,3,3]),fliplr([4,3,3]));
[ndims,h5_dims] = H5S.get_simple_extent_dims(space_id)
H5F.close(fid);
h5disp-command 显示没有任何变化:
>> h5disp('test.mat')
Group '/'
Dataset 'val'
Size: 4x9
MaxSize: 4x9
Datatype: H5T_IEEE_F64LE (double)
ChunkSize: []
Filters: none
FillValue: 0.000000
Attributes:
'MATLAB_class': 'double'
有任何想法吗?有没有更简单的方法?