簡體   English   中英

用於生成大於 RAM 的數據的內存優化

[英]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 中的生成器。

  • 如果是這樣,那么在這種情況下,生成器如何帶來優化?
  • 優化這種簡單案例的最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十次則沒有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM