有没有办法让一个numpy风格的视图存储在hdf5文件中存储的数组?

Cal*_*leb 10 python hdf5 pytables h5py

我必须处理大型3D立方体数据.我想将它们存储在HDF5文件中(使用h5py或pytables).我经常想要只对这些立方体的一部分进行分析.此部分太大而无法保存在内存中.我希望有一个numpy样式视图我的兴趣,而不是将数据复制到内存(类似于你可以用numpy memmap做).这可能吗?据我所知,使用h5py执行切片,你会在内存中得到一个numpy数组.

有人问我为什么要这样做,因为无论如何数据必须在某个时刻输入内存.出于必要,我的代码已经逐渐对来自这些多维数据集的数据进行零碎处理,一次将少量内容拉入内存.如果这些函数简单地遍历传递给它们的整个数据集,则这些函数最简单.如果我可以查看磁盘上的数据,我只需将此视图传递给这些函数即可.如果我不能拥有一个视图,我需要编写所有函数,只迭代感兴趣的片段.这将增加代码的复杂性,并使其更有可能在分析期间出现人为错误.

有没有办法在不复制到内存的情况下查看磁盘上的数据?

IFc*_*nsG 2

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

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

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