程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python操作HDF5文件示例

編輯:Python

目錄

引言

創建文件和數據集

寫數據集

讀數據集

引言

在Matlab操作HDF5文件中已經詳細介紹了HDF5文件已經利用Matlab對其進行操作的方法。這篇文章總結一下如何在Python下使用HDF5文件。我們仍然按照Matlab操作HDF5文件的順序進行,分別是創建HDF5文件,寫入數據,讀取數據。

Python下的HDF5文件依賴h5py工具包

創建文件和數據集

使用`h5py.File()方法創建hdf5文件

h5file = h5py.File(filename,'w')

然後在此基礎上創建數據集

X = h5file.create_dataset(shape=(0,args.patch_size,args.patch_size), #數據集的維度 maxshape = (None,args.patch_size,args.patch_size), #數據集的允許最大維度 dtype=float,compression='gzip',name='train', #數據類型、是否壓縮,以及數據集的名字 chunks=(args.chunk_size,args.patch_size,args.patch_size)) #分塊存儲,每一分塊的大小

最為關系的兩個參數為shape和maxshape,很顯然我們希望數據集的某一個維度是可以擴展的,所以在maxshape中,將希望擴展的維度標記為None,其他維度和shape參數裡面的一樣。還有一點值得注意的是,使用compression='gzip'以後,整個數據集能夠被極大的壓縮,對比較大的數據集非常又用,並且在數據讀寫的時候,不用用戶顯式的解碼。

寫數據集

在使用上面的creat_dataset創建了dataset以後,讀寫數據集就如同讀寫numpy數組一樣方便,比如上面的函數定義了數據集'train',也就是變量X以後,可以下面的方法來讀寫:

data = np.zeros((100,args.patch_size,arg))X[0:100,:,:] = data

在前面創建數據集的時候,我們定義shape = (args.chunk_size,args.patch_size,args.patch_size),如果有更多的數據,怎麼辦呢?

可以使用resize方法來擴展在maxshape中定義為None的那個維度:

X.resize(X.shape[0]+args.chunk_size,axis=0)

因為我們在maxshape=(None,args.patch_size,args.patch_size)中將第零個維度定義為可擴展,所以,首先我們用X.shape[0]來找到該維度的長度,並將其擴展。該維度擴展以後,就可以繼續向裡面寫入數據了。

讀數據集

讀取h5文件的方法也非常簡單,首先利用h5py.File方法打開對應的h5文件,然後將裡面的某個數據集取出至變量,對這個變量的讀取就如同numpy一樣了。

h = h5py.File(hd5file,'r')train = h['train']train[1]train[2]...

但是上面的讀取方法存在一個問題就是每一次使用的時候(train[1],train[2])都需要從硬盤讀取數據,這將會導致讀取的速度比較慢。一個比較好的方法是,每次從硬盤讀取一個chunk_size的數據,然後將這些數據存儲到內存中,在需要的時候從內存中讀取,比如使用下面的方法:

h = h5py.File(hd5file,'r')train = h['train']X = train[0:100] #一次從硬盤中讀取比較多的數據,X將存儲在內存中X[1] #從內存中讀取X[2] #從內存中讀取

這樣的方法就會快很多。

以上就是Python操作HDF5文件示例的詳細內容,更多關於Python操作HDF5文件的資料請關注軟件開發網其它相關文章!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved