在python中运行for循环以获得更高的迭代次数

mjqavswn  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(352)

我已经写了一段代码,我正试图在我的8gb内存的本地机器上运行。

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循环以运行代码的更好方法是什么?

4ktjp1zp

4ktjp1zp1#

我想我可以通过简单地去掉第一个循环来达到同样的效果,就像这样。。。

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
qv7cva1a

qv7cva1a2#

实际上,你的代码没有挂起,但是你的进程太大了,需要很长时间才能运行。。。
这不是ram的问题。。。
你为什么用 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=}")

相关问题