gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:29:29 29 4
gpt4 key购买 nike

我必须处理大型 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com