N_MC
シミュレーションの株価S
のパスは、最初のポイントを除く各パスにn
となります。これを行うためのアルゴリズムは、与えられた経路について、株価の以前の値に対して再帰的である。ここで私は今持っているものです。効率的な再帰的乗法
import numpy as np
import time
N_MC = 1000
n = 10000
S = np.zeros((N_MC, n+1))
S0 = 1.0
S[:, 0] = S0
start_time_normals = time.clock()
Z = np.exp(np.random.normal(size=(N_MC, n)))
print "generate normals time = ", time.clock() - start_time_normals
start_time_prices = time.clock()
for i in xrange(N_MC):
for j in xrange(1, n+1):
S[i, j] = S[i, j-1]*Z[i, j-1]
print "pices time = ", time.clock() - start_time_prices
回であった:
generate normals time = 1.07
pices time = 9.98
は、おそらくnumpyののルーチンを使用して、配列S
を生成するために、はるかに効率的な方法はありますか?通常のランダム変数Z
がより速く生成されてもいいですが、私はうまくいきません。
「cumsum」と「cumprod」は、i番目の値が「i-1th」に依存するとき便利な関数です。それらから計算を構築することができます。 'ufunc'' accumulate'メソッドも見てください。 – hpaulj