python - 内存优化,用于生成大于 RAM 的数据

标签 python python-3.x pandas optimization python-itertools

假设我想生成一个范围的笛卡尔积,即:

from itertools import product
var_range = range(-10000, 10000)
vars = list(product(var_range, repeat=2))
var[:10]

所以输出是这样的:

[(0, 0),
 (0, 1),
 (0, 2),
 (0, 3),
 (0, 4),
 (0, 5),
 (0, 6),
 (0, 7),
 (0, 8),
 (0, 9)]

但是,这对于 mu RAM 来说似乎太多了,而且我的 IPython(12GB RAM)崩溃了。

我正在考虑将范围分配给批处理并在四次循环迭代中使用它:

[-10000,-5000],[-4999,0],[1,5000],[5001,10000]

然后,在每次迭代之后,我可以将其作为 pandas 数据帧保存到 h5 文件,然后附加到之前的迭代结果。

我还阅读了有关 python 中的生成器的内容。

  • 如果是这样,那么在这种情况下,生成器如何带来优化?
  • 优化这种简单情况的最 Pythonic 方法是什么?

最佳答案

也许这会起作用:

from itertools import product
var_range = range(-10000, 10000)
vars = product(var_range, repeat=2)
print([next(vars) for _ in range(10)])

将非list类型转换为list需要很长时间,尤其是对于这么长的序列,您可以只使用它的一部分,前十个元素,然后它应该可以工作,就像使用 list(...) 一样,它会处理整个对象,而 next 十次则不会。

关于python - 内存优化,用于生成大于 RAM 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56824073/

相关文章:

python - 如何管理创建、添加数据和显示多个 matplotlib 图形?

python - 编译 Cython 扩展错误 - Pycharm IDE

python - 解析字符串中加入的负科学形式数字

python - [Python][cx-freeze] 导入错误 : cannot import name 'ExcelFormulaParser'

python - pandas qcut 没有将相同数量的观察结果放入每个箱子

python - Pandas 导入 FRED 数据(pandas.io.data 或 pandas_datareader)

python - PANDAS - 为多个列正确执行嵌套分组(几列构成唯一标识符)

python - 在 Django 中验证 GET 参数的正确方法

python - 查找包含图像的子文件夹

python - Pip 网络错误(并且我没有使用代理!)