
373
10
장
파이썬 성능 개선
S[0] = S0
rn = np.random.standard_normal(S.shape)
for t in range(1, M + 1):
➊
S[t] = S[t-1] * np.exp((r - sigma ** 2 / 2) * dt +
sigma * math.sqrt(dt) * rn[t])
➋
return S
In [128]: %time S = mcs_simulation_np((M, I))
CPU times: user 252 ms, sys: 32.9 ms, total: 285 ms
Wall time: 252 ms
In [129]: S[-1].mean()
Out[129]: 38.235136032258595
In [130]: %timeit S = mcs_simulation_np((M, I))
202 ms ± 27.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
➊
시간 구간에 대한 루프
➋
오일러 방식으로 모든 경로를 한 번에 처리하는 벡터화된
NumPy
코드
10.4.3
Numba
이제는
Numba
를 이런 알고리즘에 쉽게 적용하여 속도를 개선할 수 있다는 점이 더 이상 놀랍지
않다.
Numba
버전인
mcs
_
simulation
_
nb
( )
함수는
NumPy
버전보다 조금 빠르다.
In ...