#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=}")