用于迭代 NumPy 数组的惰性求值

2024-01-07

我有一个 Python 程序,可以处理相当大的 NumPy 数组(数百兆字节),这些数组存储在磁盘上的 pickle 文件中(每个文件一个约 100MB 的数组)。当我想对数据运行查询时,我通过 pickle 加载整个数组,然后执行查询(这样从 Python 程序的角度来看,整个数组都在内存中,即使操作系统正在将其换出) 。我这样做主要是因为我相信能够在 NumPy 数组上使用矢量化操作比使用 for 循环遍历每个项目要快得多。

我在一个网络服务器上运行它,该服务器有内存限制,我很快就会遇到这种情况。我对数据运行了许多不同类型的查询,因此编写“分块”代码从单独的 pickle 文件加载部分数据,处理它们,然后继续处理下一个块可能会增加很多复杂性。最好让这种“分块”对于处理这些大型数组的任何函数都是透明的。

理想的解决方案似乎是类似于生成器的东西,它定期从磁盘加载数据块,然后将数组值一一传递出去。这将大大减少程序所需的内存量,而无需对各个查询函数进行任何额外的工作。可以做这样的事情吗?


PyTables http://www.pytables.org/是一个用于管理分层数据集的包。它旨在为您解决这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于迭代 NumPy 数组的惰性求值 的相关文章

随机推荐