MATLAB創建(壓縮)hdf5數據集+ python h5py 創建、壓縮數據集。

MATLAB相關內容官方文檔

Python h5py filter pipline 官方文檔

順着官方文檔讀就行,不懂的敲一敲代碼試試就知道了;

1、用到的函數:

h5create(filename,datasetname,size,Name,value)

h5write(filename,datasetname,data,start,count,stride)

2、參數說明:filename:hdf5/h5文件的文件名,包含擴展名,如'LLD-logo.hdf5';

                       datasetname:數據集名字,就是在h5文件中創建的dataSet名字,如'data'、‘data_LL’

                       size: 表示數據集的大小,也就是數據的shape,如果你以後要寫入的數據的個數維度不確定,可以把個數維度設置爲INF;

                       data: 要寫入的數據,其大小的'size'應該與之前創建dataSet的size一致。

                       Name,value:表示名稱-值形式的鍵值對,有些參數是可選的,通過  ‘參數名’-‘值’  的形式進行賦值,一般都有默認值

start、count表示寫入data的一個子集,start表示開始的索引值,指定要寫入的第一個元素,count指沿每個維度要寫入的元素數。

stride表示間距、步幅。start、count、stride構成了data的一個超切片。

比如我要寫入一個大小(size)爲[12,12,3,24]的數組到‘myfile.h5’文件中的‘ds’數據集:可以使用命令:

h5create('myfile.h5','/ds',[12,12,3,24])

如果不存在‘myfile.h5’文件則會自動創建一個;如果有則向已有文件中寫入;

這裏我們創建一個形狀爲[12,12,3,24],作爲寫入數據集的數據,實際情況都是根據你要寫入數據的形狀來定義size。

然後寫入一個與size相同的數組到ds數據集中:

h5write('myfile.h5','/ds',mats)

這樣就可以把一個數據寫入ds數據集中了。

記錄一下今天寫h5文件的經驗:

MATLAB寫h5文件遵循:1、先創建一個空的h5文件,規定好這個文件的文件名、包含的數據集名、數據集的size(其實就是shape)、數據類型,如果要規定壓縮等級(共有0-9,默認0應該是壓縮等級最低的),還必須要指定‘ChunkSize’,最好就規定爲單位數組,比如我要寫入的數據的總size是400x400x3x15365,我的size就設爲[400x400x3x15365],ChunkSize就設爲[400,400,3,1],我設置的最高壓縮等級是9,但是也會感覺文件寫入的很慢了。2、創建數據集後才能用h5write方法寫入數據集。這裏可以指定向哪個h5文件的哪個數據集寫,如果沒有該數據集名會在該h5文件中創建該數據集,指定寫入的數據(大小要與之前創建的數據集一致),以及從數據集的什麼位置開始寫:這時候就是需要指定h5write中的start和count參數.你可以把MATLAB中的多維矩陣的存儲想象成一個個矩形小格子,比如在size爲[10,20]的矩陣中的最後[5,7]塊大小的位置存儲實際情況是這樣的:

1,1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6,14

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10,20

從[6,14]開始,存這麼一塊“ChunkSize”爲[5,7]的數據塊。如果是3維4維或者更高維的也是同理。

MATLAB中 h5create方法是用來創建數據集的,如果這個文件不存在才創建相應的h5文件,否則是在h5文件中創建數據集;用來創建數據集時需要指定數據集的一些屬性,比如數據集的名稱、size、Datatype、ChunkSize以及壓縮級別Deflate等;先創建使要寫入的數據集先存在才能接着使用h5write方法寫入數據,寫入數據時就是以創建數據集時的各項參數寫入。最重要的是之前設置的數據類型和壓縮級別,很影響文件大小!!!

常見的hdf5/h5文件的寫入過程是:

>> data_HH = h5read('logo-1.hdf5','/data_HH');
>> h5create('test.h5','/data_HH',[200,200,3,15365],'Datatype','single','ChunkSize',[200,200,3,1],'Deflate',7)
>> h5write('test.h5','/data_HH',data_HH);

對於python來說我之前一直沒找到如何在python中使用壓縮文件,準確來說我看文檔不夠耐心和仔細,導致錯過很多重要細節;之前用hdf5文件格式讀取別人的文件只有幾百兆或者十幾個G,我一讀取再寫入往往要大了許多,當時以爲是存儲的數據類型引起的,但是其實是因爲我沒有用壓縮算法!!!對於官方文檔的配置說明看的一點也不認真,這一點也是要特別吸取教訓;

在python中只需在創建數據集的時候指定:

>>> dset = f.create_dataset("zipped", (100, 100), compression="gzip")
或:
>>> dset = f.create_dataset("zipped_max", (100, 100), compression="gzip", compression_opts=9)

即可。

python 創建壓縮的hdf5數據集:

test = h5py.File('test.h5','r+')
test.create_dataset('data_processed',data=data_processed,compression='gzip',compression_opts=7)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章