在 Monte Carlo 模拟中优化 For 循环

Optimizing a For loop in a Monte Carlo simulation

我正在使用 Nataf 变换进行相关多变量模拟。我在 Python(中级知识)中开发了一个代码来执行 Monte Carlo 模拟,但它在我的计算机上花费了很多时间。谁能帮我优化这些行:

# 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 包。谢谢

我认为矢量化不是这里的问题。 如果您有一台多核机器,我会通过 运行 并行循环使用该功能。大多数 Monte Carlo 代码都可以表述为像您这样的令人尴尬的并行问题。例如,您可以使用此处所述的 joblib 包:https://blog.dominodatalab.com/simple-parallelization/

另外,请检查最后两行的缩进。我认为他们应该属于循环。