Эффективная обработка больших комбинаций в полярах без перегрузки оперативной памятиPython

Программы на Python
Ответить
Anonymous
 Эффективная обработка больших комбинаций в полярах без перегрузки оперативной памяти

Сообщение Anonymous »

У меня есть список из n значений (в моем случае n=19), и я хочу сгенерировать все возможные комбинации этих значений. Моя цель — использовать каждую комбинацию в качестве фильтра для кадра данных Polars, перебирать комбинации, выполнять некоторые функции и сохранять результаты в новый кадр данных.
Однако, поскольку n=19 , это дает 19! комбинации, которые перегружают мою оперативную память. Перебирать такое большое количество комбинаций непрактично из-за ограничений памяти.
Как я могу эффективно выполнить эти вычисления, не потребляя слишком много оперативной памяти? Есть ли способ уменьшить использование памяти или обработать это итеративно, не сохраняя все в памяти одновременно? Есть какие-нибудь предложения по оптимизации этого рабочего процесса с помощью Polars?
Мой текущий подход:

Код: Выделить всё

import polars as pl
import itertools

states = ["a", "b", "c", "d"]

df = pl.DataFrame({
"ID": [1, 2, 3, 4, 5, 6,7,8,9,10],
"state": ["b", "b", "a", "d","a", "b", "c", "d","c", "d"],
"Value" : [3,6,9,12,15,18,21,24,27,30],
})

all_combinations = []

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

РЕДАКТИРОВАТЬ: Спасибо за отзыв! Я понял, что мой нынешний подход не оптимален. Скоро я опубликую новый вопрос с полным контекстом.

Подробнее здесь: https://stackoverflow.com/questions/790 ... oading-ram
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»