2013-08-01 1 views
3

int32 데이터 값의 배열을 가진 HDF5 데이터 파일이 있습니다. 해당 배열에 저장된 데이터를 다른 형식의 다른 값 (double)으로 변경하고 싶습니다. 나는 다음과 데이터 형식을 조회 할 수 있습니다 예를 들어어떻게 MATLAB에서 HDF5 파일의 데이터 유형을 변경합니까?

:

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); 

hdf5 파일에서 데이터 세트를 삭제하는 기능에 대해 Matlab docs를 검토했지만 참조를 찾을 수 없습니다. 어떤 아이디어라도 있으십니까?

답변

2

데이터 집합을 삭제하거나 해당 데이터 형식을 변경할 수 없습니다. HDF5 manual의 섹션 5.3.2에서 :

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

이 공간가 HDF5 파일에 할당되는 방식 때문입니다. 같은 이유로 데이터 집합을 삭제할 수는 없지만 "연결 해제"되어 액세스 할 수 없게 될 수 있지만 사용 된 공간을 회수하지는 못합니다.

데이터 유형을 변경해야하는 경우 두 가지 방법이 있습니다. 첫 번째 방법은 기존 데이터 집합의 연결을 끊고 그 자리에 새 데이터 집합을 만드는 것입니다. 새 데이터 집합은 이전 데이터 집합과 동일한 이름을 가질 수 있습니다. 그러나 공간이 중요한 경우 완전히 새로운 HDF5 파일을 만들고 이전 데이터를 새 파일로 복사하는 것이 좋습니다.

+0

감사합니다. 데이터를 새 파일로 복사합니다. – mor22

0

비슷한 문제인 This post에 따르면 HDF5 파일에서 데이터 세트를 삭제하는 메커니즘이 없습니다. 또한 Modify in place이 가능함을 나타냅니다.

+0

데이터를 수정할 수는 있지만 데이터 유형은 아닙니다. – Yossarian