我正在使用Nataf变换进行相关多变量模拟。我开发了一个Python(中级知识)代码来执行蒙特卡罗模拟,但它在我的计算机上花了很多时间。任何人都可以帮助我优化这些线:
# Exponential distribution (stats package)
loc_exp = 15.0
scale_exp = 139.21617
# Gamma distribution (l-moments package)
loc_gam = 0.72698
scale_gam = 16.18526
for i in range(len(rho_z)):
# Generate standarn normal variates
n = int(1e6)
r = np.random.normal(0, 1, [n,2])
ui = r[:,0]
uj = r[:,1]
xi = stats.expon.ppf(stats.norm.cdf(ui), loc_exp, scale_exp)
xj = lmoments.quagam(stats.norm.cdf(rho_z[i]*ui + np.sqrt(1.0 - rho_z[i]**2)*uj), para = np.array((loc_gam, scale_gam)))
# evaluate rho_x
R = np.corrcoef(xi,xj)
rho_x[i] = R[0,1]
我正在使用stats和lmoments包。感谢
答案 0 :(得分:0)
我认为矢量化不是问题所在。 如果您有一台具有多个内核的计算机,我将通过并行运行该环来使用该功能。大多数蒙特卡罗代码可以表达为令人尴尬的并行问题,例如你的问题。您可以使用例如此处描述的joblib包:https://blog.dominodatalab.com/simple-parallelization/
另外,请检查最后两行的缩进。我认为他们应该属于循环。