Запуск цикла for для большего числа итераций в python

#python #python-3.x #numpy #dictionary #tuples

Вопрос:

Я написал фрагмент кода, который пытаюсь запустить на своей локальной машине с 8 ГБ оперативной памяти.

 import numpy as np

tasks = ['A','B','C','D']
tasks_pass_prob = [0.7,0.1,0.5,0.3]
task_probs = tuple(zip(tasks,tasks_pass_prob))
N = 1000000 
n = 1
results_dict = {}

for _ in range(N):
    for t,p in task_probs:
        res = np.random.binomial(n,p,N)
        results_dict[t]=res
 

Для меньших значений N код выполняется, но при более высоком значении N машина зависает. Есть ли лучший способ реструктурировать мой цикл for для запуска кода ?

Ответ №1:

Я думаю, что могу добиться того же самого, просто удалив первый цикл вот так…

 import numpy as np

tasks = ['A','B','C','D']
tasks_pass_prob = [0.7,0.1,0.5,0.3]
task_probs = tuple(zip(tasks,tasks_pass_prob))
N = 1000000
n = 1
results_dict = {}

for t,p in task_probs:
    res = np.random.binomial(n,p,N)
    results_dict[t]=res
 

Ответ №2:

На самом деле ваш код не зависает, но ваши процессы настолько велики, что для их запуска требуется много времени…
Проблема не в оперативной памяти…

И почему вы использовали for _ in range(N) ?

Я предлагаю вам написать это так:

 import numpy as np

tasks = ['A','B','C','D']
tasks_pass_prob = [0.7,0.1,0.5,0.3]
task_probs = tuple(zip(tasks,tasks_pass_prob))
N = 1000000
n = 1
results_dict = {}

# for _ in range(N):
for t, p in task_probs:
    res = np.random.binomial(n, p, N)
    results_dict[t] = res
    print(f"{res=}, {results_dict=}")