我有一大組簡單的模擬,我需要運行,我想知道它們是否可以同時完成。讓我描述一下這種情況:對於100種疾病,我有1000次吸毒流行,並且對於20種年齡組,這些疾病有1000次相應的殘疾權數(0-1級有多嚴重)。我需要做的模擬是,根據一系列流行率,確定有多少人會有不同的疾病組合。這裏是輸入數據看起來像10周的疾病是什麼:python中的同時模擬
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相當陌生,所以更多的描述是非常有用的。
非常感謝此輸入。不幸的是,我需要爲20個地區,30個年齡段和2個性別進行同樣的1000次模擬 - 我將如何在集羣系統上並行化整個過程。 – mike
如果您需要在羣集上運行此功能,則可以使用Beanstlkd之類的隊列服務器(如果在linux/unix上)。不要從simulations_to_run獲取作業,而是從隊列服務器中獲取它們。一旦任務運行,你可以把它放在beanstalkd服務器上的一個不同的管道上。這段代碼應該很容易適應使用隊列服務器。你將不得不在所有服務器上運行這個腳本。 – Martin