hdf5- 인터페이스를 사용하여 매트 파일을 현재 위치에서 수정하려고합니다.매트 파일의 배열 배열
크기가 [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-명령은 아무것도 변경되지 것을 보여줍니다
>> 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'
어떤 아이디어가? 더 간단한 방법이 있습니까?
HDF5 파일에서 데이터 세트의 차원 수를 변경할 수 없습니다. 이를 수행하는 유일한 방법은 원하는 차원으로 새 데이터 집합을 만드는 것입니다. – Yossarian
@ Yossarian 정말 그렇게하니? 4x9와 4x3x3 데이터 세트의 유일한 차이점은 '크기'/ 'MaxSize'태그라고 생각했을 것입니다. 데이터 그 자체는 순차적으로 저장됩니다. 그렇지 않습니다. 단순히 해석을 바꾸는 문제 일뿐입니다. 어쨌든, 그건 꽤 이상한 한계처럼 보입니다. 왜 이것이 그렇게 된 것인지 알고 싶습니까? – DNF
데이터가 디스크에 저장되는 방법은 메모리의 표현과 완전히 다를 수 있습니다. 기본적으로 HDF5는 B- 트리를 사용하여 데이터를 저장하므로 데이터가 디스크에 순차적으로 있다는 보장이 없으며 크기를 조정하려는 데이터가 있다면 원하지 않을 것입니다. 또한 데이터 집합의 크기를 조정할 수는 있지만 크기를 변경할 수는 없습니다. 이렇게하려면 청크를 사용해야하며 matlab에서 사용하지 않는 것으로 보입니다. – Yossarian