[英]Memory optimization for generating data larger than RAM
假設我想生成一個范圍的笛卡爾積,即:
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 中的生成器。
也許這會奏效:
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
十次則沒有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.