程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何使用 h5py 自动调整 HDF5 数据集的大小?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何使用 h5py 自动调整 HDF5 数据集的大小??

开发过程中遇到如何使用 h5py 自动调整 HDF5 数据集的大小?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何使用 h5py 自动调整 HDF5 数据集的大小?的解决方法建议,希望对你解决如何使用 h5py 自动调整 HDF5 数据集的大小?有所启发或帮助;

有没有办法让 HDF5 数据集从小规模开始,然后自动调整大小以适应添加到其中的越来越多的项目?

我知道使用 h5py 我可以从小处着手并使数据集的大小“无限”,如下所示:

dset = file.create_dataset("my_dataset",(1024,),maxshape=(None,))

但是 AFAIK 我仍然需要 resize() 数据集接近其当前容量(在上面的示例中最初为 1024)。

有没有办法让我不必在我的代码中显式地 resize()

解决方法

简答:不。
我不是底层 HDF5 库的专家,但我认为它们没有这种能力(而 h5py 只是一个包装器)。 (有点)好消息:如果您尝试写入超出分配的大小,h5py 将引发异常。 下面的代码扩展了您的示例以进行演示。

with h5py.File('SO_68389770.h5','w') as h5f:
    dset = h5f.create_dataset("my_dataset",(1024,),maxshape=(None,))
    size = 100
    for i in range(10):
        arr = np.random.random(sizE)
        start,end = i*size,i*size+size
        dset[start:end] = arr

这适用于 range(10)。您将在 range(11) 中收到此错误:
TypeError: Can't broadcast (100,) -> (24,)

下面的代码通过在编写前检查 dset.shape[0] 来干净地处理任何大小。

with h5py.File('SO_68389770.h5',))
    size = 100
    for i in range(13):
        arr = np.random.random(sizE)
        start,i*size+size
        if Dset.shape[0] >= end :
            dset[start:end] = arr
        else:
            print(f'insufficient dset size,end={enD}; resizing')
            dset.resize(end,axis=0)
            dset[start:end] = arr
     

大佬总结

以上是大佬教程为你收集整理的如何使用 h5py 自动调整 HDF5 数据集的大小?全部内容,希望文章能够帮你解决如何使用 h5py 自动调整 HDF5 数据集的大小?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。