使用h5py将大型4D numpy阵列压缩到HDF5:9

时间:2016-03-28 19:56:58

标签: python arrays numpy hdf5 h5py

我是大型数据集的新手,无法将我正在阅读的解释和教程外推到我的问题中。

我想将37019张图像(每张450x600x3)保存到一个numpy数组中并将其压缩成一个文件进行训练。是否更好地实例化37019x450x600x3零点并稍后修改它们或逐个追加450x600x3阵列?

现在我正在使用h5py但它会导致Killed:9

import numpy as np
import h5py

imgarray = np.zeros((37019,450, 600, 3))

with h5py.File('deleteme.h5', 'a') as FOB:
    FOB.create_dataset("imgarray",data=imgarray,compression="gzip",compression_opts=9)

大约需要5分钟,然后:

Killed: 9

当图像数量较小时(例如3700而不是37019),这会起作用.3700会产生30MB的.h5文件。

这是否意味着我的数组对于h5dy中的一个数据集来说太大了?我是否需要将其保存在较小的块,单独的数据集或其他内容中?你推荐什么方法以便以后轻松访问和修改?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在您的其他问题中,您发现zip档案可能存在大小限制;它也可能适用于gzip压缩。或者它可能只是花了太长时间。

h5py文档表明,dataset在保存到h5py文件时会动态压缩(并在运行中解压缩)。我也看到一些提及它与chunking的交互。您可能需要浏览h5py github存储库或相关的邮件列表。

您是否尝试过其他压缩方法或参数?

如何将数据保存在多个数据集中,每个数据集的大小都可以轻松压缩?

答案 1 :(得分:0)

可能有更好的方法可以做到这一点,但我最终只是将我的数据集分成几个大小为1000x450x600x3的numpy数组,并且gzip正常工作。花了25分钟,但它都保存为400MB大小的.h5文件。谢谢!