假设我要生成一个范围的笛卡尔积,即:
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中的生成器的信息。
答案 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
进行十次处理。