오늘의 포스트에서 나는 수치 시뮬레이션의 속도를 높일 수 있는 수치 를 보여주는 또 다른 예를 제공할 것 입니다. 저는 이 모듈을 주가 랜덤 워크의 몬테카를로 시뮬레이션에 적용합니다. 이것은 인기 있는 몬테카를로 시뮬레이션 예제이며 몇 년 전에 블로그 게시물에서도 이에 대한 예제를 제공했습니다.
Python에서 숫자를 사용한 몬테카를로 시뮬레이션
아래 코드 세그먼트에서 관련 모듈과 모듈의 일부를 가져옵니다. 이전 게시물에서 지적했듯이 numpy 에서는 예를 들어 잘 작동 하지만 pandas 에서는 잘 작동하지 않습니다 . 가격 랜덤 워크 몬테카를로 시뮬레이션의 두 가지 버전을 구현합니다. 두 시뮬레이션 모두 365일 동안 n개의 무작위 걷기를 반복합니다. 매일 가격 변동은 지정된 일일 수익률과 지정된 일간 수익률의 표준 편차를 갖는 무작위 정규 분포에 따라 무작위로 분포됩니다.
import numpy as np
from matplotlib import pyplot as plt
import random
import time
from numba import njit
def random_walker(n: int, length: int) -> np.ndarray:
arr = np.zeros((n, length), dtype = float)
for i in range(n):
idx = 100
for j in range(length):
idx += idx*random.gauss(0.00015, 0.02)
arr[i, j] = idx
return arr
@njit
def nb_random_walker(n: int, length: int) -> np.ndarray:
arr = np.zeros((n, length), dtype = float)
for i in range(n):
idx = 100
for j in range(length):
idx += idx*random.gauss(0.00015, 0.02)
arr[i, j] = idx
return arr
이제 무작위 시뮬레이션 실행을 차례로 실행하고 두 실행의 시뮬레이션 기간을 계산합니다. 아래 코드에서 이것을 볼 수 있습니다.
# --- monte carlo run without numba ------------------
starttime = time.time()
arr = random_walker(10000, 365)
endtime = time.time()
print("monte carlo random walk without NUMBA: ")
print(endtime-starttime)
# --- monte carlo run with numba --------------------
starttime = time.time()
arr = nb_random_walker(10000, 365)
endtime = time.time()
print("monte carlo random walk with NUMBA: ")
print(endtime-starttime)
출력은 다음과 같습니다.
monte carlo random walk without NUMBA:
1.9181511402130127
monte carlo random walk with NUMBA:
0.6535243988037109
이 경우 numa 는 몬테카를로 시뮬레이션 런타임을 거의 3배 향상시켰 습니다. 그건 그렇고, 이것은 랜덤 워크의 모습입니다:
최종 발언 및 관련 내용
이 기사에서는 Python의 모듈인 numa 가 몬테카를로 시뮬레이션을 훨씬 더 빠르게 만드는 방법을 보여주었습니다. 그러나 이 모듈과 함께 제공되는 제약 조건을 알고 있어야 합니다. 내가 지적했듯이 숫자 프레임워크가 있으면 숫자를 최대한 활용할 수 있습니다. 또한,numa와 잘 작동하는 모듈과 패키지와 그렇지 않은 모듈에 대해 알고 있어야 합니다. 예를 들어 numpy 는numpy 와 잘 작동하지만 pandas 는 그렇지 않습니다.
여기에서 더 읽을 수 있습니다:
여기에서 Python의 또 다른 예를 볼 수도 있습니다.
- 링크 : 더 빠른 Python 시뮬레이션
최적화 및 시뮬레이션을 전문으로하는 산업 엔지니어 (R, Python, SQL, VBA)
Leave a Reply