Оптимизация памяти для генерации данных больше ОЗУ - PullRequest
1 голос
/ 30 июня 2019

Допустим, я хочу сгенерировать декартово произведение диапазона, то есть:

from itertools import product
var_range = range(-10000, 10000)
vars = list(product(var_range, repeat=2))
var[:10]

Таким образом, результат будет выглядеть так:Сбои ОЗУ и мой IPython (12 ГБ ОЗУ).

Я думал о разделении диапазонов на пакеты и использую его в итерациях цикла четверок:

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

Затем, после каждой итерации, я мог сохранить его как кадр данных pandas в файл h5 и затем добавить к предыдущему результату итерации..

Я также читал о генераторах в python.

  • Если так, то КАК в этом случае генераторы могут принести оптимизацию?
  • Какой самый оптимистичный способ оптимизировать такой простой случай?

1 Ответ

1 голос
/ 30 июня 2019

Может быть, это сработает:

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 десять раз - нет.

...