• 利用h5py加速数据集读取


    直接使用:

    def store_in_h5(images, output_filename):
        with h5py.File(output_filename, 'w') as hf:
            data_group = hf.create_group('data')
            label_group = hf.create_group('label')
    
            for i, (data_patches, label_patches) in enumerate(images):
                for j, (data, label) in enumerate(zip(data_patches, label_patches)):
                    if torch.is_tensor(data):
                        data = data.cpu().numpy()
                    if torch.is_tensor(label):
                        label = label.cpu().numpy()
    
                    data_group.create_dataset(f'data_{i}_{j}', data=data, compression="gzip", compression_opts=9)
                    label_group.create_dataset(f'label_{i}_{j}', data=label, compression="gzip", compression_opts=9)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    H5PY

    文档

    https://docs.h5py.org/en/stable/
    
    • 1

    核心概念

    HDF5文件是两种对象的容器:数据集(datasets),它们是类似数组的数据集合,以及组(groups),它们是类似文件夹的容器,用于存放数据集和其他组。在使用h5py时,需要记住的最基本的事情是:

    组的工作方式类似于字典,数据集的工作方式类似于NumPy数组

    假设有人发送给你一个HDF5文件,名为mytestfile.hdf5。(要创建此文件,请参见附录:创建文件。)你需要做的第一件事是打开该文件以供读取:

    python
    Copy

    import h5py
    f = h5py.File('mytestfile.hdf5', 'r')
    
    • 1
    • 2

    File对象是你的起点。这个文件中存储了什么?记住,h5py.File的行为类似于Python字典,因此我们可以检查键:

    python
    Copy

    list(f.keys())
    ['mydataset']
    
    • 1
    • 2

    根据我们的观察,在该文件中有一个名为mydataset的数据集。让我们将数据集作为一个Dataset对象进行检查:

    python
    Copy
    dset = f[‘mydataset’]
    我们获得的对象不是一个数组,而是一个HDF5数据集。与NumPy数组一样,数据集具有形状(shape)和数据类型(dtype):

    python
    Copy

    dset.shape
    (100,)
    dset.dtype
    dtype('int32')
    
    • 1
    • 2
    • 3
    • 4

    数据集还支持数组样式的切片操作。以下是如何从文件中的数据集读取和写入数据的示例:

    python
    Copy

    dset[...] = np.arange(100)
    dset[0]
    0
    dset[10]
    10
    dset[0:100:10]
    array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    更多信息,请参阅文件对象(File Objects)和数据集(Datasets)

  • 相关阅读:
    [PowerQuery] PowerAutoMate 刷新PowerBI 数据
    JVM-五大区
    java-php-python-ssm校园面包超市系统计算机毕业设计
    领域驱动设计
    解析java数值类型数据混合运算
    接口测试 —— Requests库GET请求!
    帮助命令---学习Linux命令的第一步
    菜鸟学Kubernetes(K8s)系列——(七)关于Kubernetes底层工作原理
    ELA--学习笔记
    使用Selenium爬取目标网站被识别的解决之法
  • 原文地址:https://blog.csdn.net/prinTao/article/details/134262379