gpt4 book ai didi

python - python中的同时模拟

转载 作者:太空狗 更新时间:2023-10-30 03:06:41 26 4
gpt4 key购买 nike

我有大量需要运行的简单模拟,我想知道它们是否可以同时完成。让我描述一下情况:我有 1000 次抽取 100 种疾病的患病率,以及 1000 次抽取 20 个年龄组的这些疾病的相应残疾权重(在 0-1 范围内患有这种疾病有多糟糕)。我需要做的模拟是在给定一组患病率的情况下确定有多少人会患有不同的疾病组合。以下是 10 种疾病的输入数据:

from __future__ import division
import numpy as np
disease_number = np.array([1,2,3,4]*10)
age = np.array([5, 10, 15, 20]*10)
prevalence = np.random.uniform(0, 1, (40, 1000))
disability_weight = np.random.uniform(0,1,(40, 1000))

单次抽奖的模拟看起来像这样,对于 5 岁,抽 1。

prev_draw1 = prevalence[age==5, 1]
disability_draw1 = disability_weight[age==5, 1]
simulation = np.random.binomial(1, prev_draw1, (100000, prev_draw1.shape[0])

然后,在给定多种疾病合并症的情况下,计算每种疾病的失能权重,我执行以下操作:将分母设置为当前失能权重的总和,并使用给定疾病的失能权重作为分子。对于疾病 1:

denom = np.sum(disability_draw1**simulaiton)
denom[denom==1]=0
numerator = disability_draw1*simulation[:, 0]
adjusted_dw = np.sum(numerator/denom)

我需要针对每种疾病分别进行调整后的 dw 计算。有没有办法让我同时做这1000个模拟?感谢任何帮助,我对 python 还很陌生,所以更多的描述非常有帮助。

最佳答案

如果您有多个处理器/内核,您可以查看多处理模块。

虽然同时运行 1000 个模拟可能有点昂贵。您可能应该以一次每个内核一个的速率运行您的模拟。

您可以使用队列模块并使用进程池。

这是它可能看起来像的一个迷你示例(未测试):

from multiprocessing import Process, Queue

def run_simulation(simulations, results):
while simulations.qsize() > 0:
simulation_params = simulations.get()
# run simulation
results.put(simulation_result)
simulations.task_done()

if __name__ == '__main__':
simulations_to_run = Queue()
simulations_to_run.put({}) # simulation parameters go in this dict, add all simulations, one per line (could be done in a loop, with a list of dicts)
results = Queue()
for i in range(8): #number processes you want to run
p = Process(target=run_simulation, args=(simulations_to_run, results))
p.start()

simulations_to_run.join()
# now, all results shoud be in the results Queue

http://docs.python.org/library/multiprocessing.html

关于python - python中的同时模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7463268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com