2013-04-25 44 views
13

有沒有人有想過從h5py更新hdf5數據集? 假設我們創建這樣一個數據集:正在更新h5py數據集

import h5py 
import numpy 
f = h5py.File('myfile.hdf5') 
dset = f.create_dataset('mydataset', data=numpy.ones((2,2),"=i4")) 
new_dset_value=numpy.zeros((3,3),"=i4") 

是否有可能延長至DSET一個3x3的陣列numpy的?

回答

14

您需要使用「可擴展」屬性創建數據集。在初始創建數據集之後無法更改此設置。要做到這一點,you need to use the "maxshape" keywordmaxshape元組中的值None意味着該尺寸可以具有無限大小。所以,如果f是一個HDF5文件:

dset = f.create_dataset('mydataset', (2,2), maxshape=(None,3)) 

創建的尺寸(2,2)的數據集,其可無限期地沿着第一維度和3沿第二延伸。現在,你可以用resize擴展數據集:

dset.resize((3,3)) 
dset[:,:] = np.zeros((3,3),"=i4") 

第一個維度可以儘可能多的增加,因爲你喜歡:

dset.resize((10,3)) 
+5

調整大小也接受軸參數,所以你只需要指定新的大小對於你正在擴展的軸,而不是所有的軸:dset.resize(10,axis = 0) – velotron 2015-11-11 20:50:42

+0

這是非常有用的@velotron,它可以被添加到接受的答案,因爲對於多維數組來說,這樣做更容易。 – gcucurull 2016-05-12 07:52:18

+0

這個例子覆蓋了以前在文件中的內容嗎?還是隻是附加新內容? – user798719 2017-05-14 09:51:56