优化内存以生成大于RAM的数据

时间:2019-06-30 10:22:22

标签: python python-3.x pandas optimization 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(12 GB RAM)崩溃来说非常重要。

我正在考虑将范围分批处理,并在Fours循环迭代中使用它:

  

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

然后,每次迭代后,我都可以将其另存为pandas数据帧到h5文件中,然后追加到先前的迭代结果中。

我还阅读了有关python中的生成器的信息。

  • 如果是这样,那么在这种情况下,发电机如何带来优化?
  • 最简单的方式来优化这种简单案例的方式是什么?

1 个答案:

答案 0 :(得分:1)

也许这行得通:

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进行十次处理。