2017-07-25 154 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