我正在尝试在h5py中创建可调整大小的数据集。它应该是一个简单的一维数组,其中写有一些初始值,然后在可用时使用其他值进行更新。当我尝试这个时:
ds = g2.create_dataset(wf, maxshape=(None), chunks=True, data=values)
size = ds.shape[0] + len(values)
ds.resize(size, axis=0)
我收到此错误:
ValueError:无法设置扩展数据集(Dimension不能超过现有的最大大小(new:120 max:60))
但是,似乎提供数据或设置形状会覆盖maxshape并且数据集不会调整大小,并显示当前最大形状是最初在shape属性中提供或设置的数据的消息。
根据h5py documentation,这正是应该如何完成的,并且将maxshape设置为None应该提供无限扩展,而将块设置为True应该启用自动块大小确定。
我也试过这样的事情,并分别添加数据:
ds = g2.create_dataset(wf,(100,), maxshape=(None), chunks=True, dtype='i')
它会抛出同样的错误,到现在为止我不确定我是否设置了错误的尺寸,或者它是否与数据类型或形状有任何关系。
答案 0 :(得分: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)
。