У меня есть список из n значений (в моем случае n=19), и я хочу сгенерировать все возможные комбинации этих значений. Моя цель — использовать каждую комбинацию в качестве фильтра для кадра данных Polars, перебирать комбинации, выполнять некоторые функции и сохранять результаты в новый кадр данных.
Однако, поскольку n=19 , это дает 19! комбинации, которые перегружают мою оперативную память. Перебирать такое большое количество комбинаций непрактично из-за ограничений памяти.
Как я могу эффективно выполнить эти вычисления, не потребляя слишком много оперативной памяти? Есть ли способ уменьшить использование памяти или обработать это итеративно, не сохраняя все в памяти одновременно? Есть какие-нибудь предложения по оптимизации этого рабочего процесса с помощью Polars?
Мой текущий подход:
У меня есть список из n значений (в моем случае n=19), и я хочу сгенерировать все возможные комбинации этих значений. Моя цель — использовать каждую комбинацию в качестве фильтра для кадра данных Polars, перебирать комбинации, выполнять некоторые функции и сохранять результаты в новый кадр данных. Однако, поскольку n=19 , это дает 19! комбинации, которые перегружают мою оперативную память. Перебирать такое большое количество комбинаций непрактично из-за ограничений памяти. Как я могу эффективно выполнить эти вычисления, не потребляя слишком много оперативной памяти? Есть ли способ уменьшить использование памяти или обработать это итеративно, не сохраняя все в памяти одновременно? Есть какие-нибудь предложения по оптимизации этого рабочего процесса с помощью Polars? Мой текущий подход: [code]import polars as pl import itertools
for r in range(1,len(states)+1): all_combinations.extend(itertools.combinations(states, r))
def foo(df): return( df )
new_rows = []
for i in range(len(all_combinations)): df_filtered = df.filter(pl.col("state").is_in(all_combinations[i])) df_func = foo(df_filtered) x = df_func.shape[0] new_rows.append({"loop_index": i, "shape": x})
df_final = pl.DataFrame(new_rows) df_final
[/code] РЕДАКТИРОВАТЬ: Спасибо за отзыв! Я понял, что мой нынешний подход не оптимален. Скоро я опубликую новый вопрос с полным контекстом.