假设我想生成一个范围的笛卡尔积,即:
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/