2017-10-29 1 views
1

Nataf Transform을 사용하여 상관 관계가있는 다 변수 시뮬레이션을하고 있습니다. Monte Carlo 시뮬레이션을 수행하기 위해 Python (중급 지식)으로 코드를 개발했지만 컴퓨터에서는 많은 시간이 걸립니다. 누구든지 다음 라인을 최적화하는 데 도움을 줄 수 있습니까?몬테카를로 시뮬레이션에서 For 루프 최적화

# 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] 

저는 통계 및 패키지를 사용하고 있습니다. 고마워요

+0

가능한 한 계산을 벡터화 할 수 있도록 각 부분의 타이밍을 조정하고 다시 작성하십시오. 먼저 LUT에서 사전 생성 된 임의의 값을 사용하여 시작할 것입니다. – StarShine

답변

0

저는 여기에 벡터화가 문제가되지 않는다고 생각합니다. 여러 개의 코어가있는 머신을 사용하는 경우 루프를 병렬로 실행하여 해당 기능을 사용합니다. 대부분의 몬테카를로 코드는 당장 곤란한 평행 문제로 공식화 될 수 있습니다. 여기에 설명 된대로 joblib 패키지를 사용할 수 있습니다. https://blog.dominodatalab.com/simple-parallelization/

또한 마지막 두 줄의 들여 쓰기를 확인하십시오. 루프에 속해야한다고 생각합니다.

+0

고마워. 여러 개의 코어가있는 머신을 가지고 있기 때문에 방금 공유 한 링크를 읽게 될 것입니다. –