在 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/
另外,请检查最后两行的缩进。我认为他们应该属于循环。
我正在使用 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/
另外,请检查最后两行的缩进。我认为他们应该属于循环。