python - 有没有办法获取存储在 hdf5 文件中的数组切片的 numpy 样式 View ?

标签 python hdf5 pytables h5py

我必须处理大型 3D 数据立方体。我想将它们存储在 HDF5 文件中(使用 h5py 或者 pytables)。我经常只想对这些多维数据集的一部分进行分析。此部分太大,无法保存在内存中。我希望对我感兴趣的切片有一个 numpy 样式的 View ,而不将数据复制到内存(类似于您可以使用 numpy 内存映射执行的操作)。这可能吗?据我所知,使用 h5py 执行切片时,您会在内存中得到一个 numpy 数组。

有人问我为什么要这样做,因为无论如何数据都必须在某个时候进入内存。出于必要,我的代码已经对来自这些多维数据集的数据进行了零碎的处理,一次将一小部分拉入内存。如果这些函数只是迭代传递给它们的整个数据集,那么它们是最简单的。如果我可以查看磁盘上的数据,我只需将此 View 原样传递给这些函数即可。如果我不能有一个 View ,我需要编写我所有的函数来只迭代感兴趣的切片。这将增加代码的复杂性,并使其更有可能在分析过程中出现人为错误。

有什么方法可以在不复制到内存的情况下查看磁盘上的数据?

最佳答案

一种可能性是创建一个 generator一个一个地产生切片的元素。一旦有了这样的生成器,就可以将其传递给现有代码并像往常一样遍历生成器。例如,您可以在生成器上使用 for 循环,就像在切片上使用它一样。生成器不会一次存储它们的所有值,它们会根据需要“生成”它们。

您可以只创建所需立方体位置的切片,而不是数据本身,或者如果您还有太多位置无法存储在内存中,则可以通过编程方式生成切片的下一个位置。生成器可以使用这些位置来逐个生成它们包含的数据。

假设您的切片是长方体的(可能是更高维度的)等价物,您可以使用嵌套的 for-range() 循环生成坐标,或者通过应用 product() 来自 itertools范围对象的模块。

关于python - 有没有办法获取存储在 hdf5 文件中的数组切片的 numpy 样式 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27803331/

相关文章:

python - 大 numpy 数组的加速切片

python - Django Wagtail CMS 迁移 : Cannot resolve bases for [<ModelState: 'app.CustomPage' >

python - pip install `unicode` 错误中加密安装失败

python - NLTK 创建的字符串正则表达式不起作用

python - 如何将多维 h5py 数据集复制到平面一维 Python 列表而不制作任何中间副本?

Python 2.7 : Appending Data to Table in Pandas

python - 如何修改数据库中已经迁移的模型?

python - HDF5 可能的数据损坏或丢失?

python - 使用 OpenCV readNetFromTensorFlow : Error: Unknown layer type Shape in op decoder_stage0_upsampling/Shape 运行 Keras DNN 模型 (UNet)

python - PyTables 和 HDF5 : Massive overhead for tree data