2017-07-25 156 views
1

我想在h5py中創建可調整大小的數據集,它應該是一個簡單的一維數組,初始值寫在上面,然後用他們的空閒附加值更新當我試試這個:嘗試在h5py中擴展現有數據集時出錯:ValueError:無法設置擴展數據集(Dimension不能超過現有的最大大小

ds = g2.create_dataset(wf, maxshape=(None), chunks=True, data=values) 
size = ds.shape[0] + len(values) 
ds.resize(size, axis=0) 

我得到這個錯誤:

ValueError: Unable to set extend dataset (Dimension cannot exceed the existing maximal size (new: 120 max: 60))

然而,似乎提供數據或設置該形狀將覆蓋maxshape和數據集沒有調整大小,並且提示當前最大形狀不是最初提供的數據,或者是在shape屬性中設置的數據。

根據h5py documentation這正是應該如何完成的,並且將maxshape設置爲None應該提供無限擴展,而將塊設置爲True應該啓用自動塊大小確定。

我自己也嘗試這樣的事情,並分別添加數據:

ds = g2.create_dataset(wf,(100,), maxshape=(None), chunks=True, dtype='i') 

它拋出了同樣的錯誤,而現在我不知道如果我錯誤地設置了尺寸,或者如果它有什麼與數據類型或形狀。

+0

我認爲你必須做一個調整大小來添加新的材料。是不是有關於在文檔中的東西https://stackoverflow.com/questions/40062770/adding-data-to-existing-h5py-file-along-new-axis-using-h5py – hpaulj

+0

我調整大小,但是問題所在,它不希望接受新的大小,因爲似乎maxshape已被設置爲初始數據的大小,而不是maxshape變量中設置的大小。感謝您提供的信息,我之前沒有找到該帖子。 – TeilaRei

回答

0

我唯一做的不同的是使用(None,)來塑造形狀,而不是(None);這是確保我給它一個元組形狀。沒有逗號,我沒有嘗試過。

In [177]: f=h5py.File('test1.h5','w') 
In [178]: ds = f.create_dataset('name', maxshape=(None,), chunks=True, data=np.arange(10)) 
In [179]: ds.shape 
Out[179]: (10,) 
In [180]: ds.resize((20,)) 
In [181]: ds[:] 
Out[181]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 
In [182]: ds[10:]=np.arange(10,20) 
In [183]: ds[:] 
Out[183]: 
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 
     17, 18, 19]) 

maxshape必須是一個元組。 resize不適用於(None)

+0

與此同時,我嘗試了同樣的事情,它確實奏效。我也更新了我的h5py到2.7.xx(最新)。不知道不同的版本是否與它有關,但現在它可以工作。 – TeilaRei