2013-08-01 47 views
3

我有一個HDF5數據文件,它有一個int32數據值的數組。我希望將存儲在該數組中的數據更改爲不同格式的值(雙精度型)。如何在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); 

我已經看過Matlab文檔中刪除hdf5文件中的數據集的功能,但找不到任何引用。有人有主意嗎?

回答

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

相關問題