矢量化方程

时间:2014-07-26 18:02:55

标签: python numpy

我正在寻找完全矢量化我所拥有的模型,用于平均还原波动率过程 - 也就是Ornstein-Uhlenbeck过程。

我跟着这里的代码:http://nakamuraseminars.org/nsblog/2014/06/21/monte-carlo-in-python-an-example/,它有一个相似但不同的等式。

import pandas as pd
import numpy as np
def OU_estimation(M=100000, N=25, T=25, sigma=.1, mu=1, lambda_est=1, S0=1):
    dt = T/N # simulation time step 
    S = np.zeros((M,N+1))
    S[:,0] = S0
    for n in range(N):
        #Partially vectorized
        eps = np.random.normal(0, 1, (M))
        S[:,n+1] = S[:,n] + lambda_est*(mu - S[:,n])*dt + sigma*eps 
    df = pd.DataFrame(S)
    return df

由于代码当前是部分矢量化的,它会迭代所采取的步骤数,它已经很快了。我希望看看它是否可以作为更多的学习经验完全矢量化

1 个答案:

答案 0 :(得分:2)

如果您只计算最后一列,则可以以矢量化方式进行:

def OU_lastcol(M=100000, N=25, T=25, sigma=.1, mu=1, lambda_est=1, S0=1):
    dt = T/N
    c = (1-lambda_est*dt)
    cv = c**np.arange(N)[::-1]
    R = np.random.normal(lambda_est*mu*dt, sigma, (M,N))
    SN = np.dot(R, cv) + S0*c**N
    return SN

这比使用默认参数的循环代码执行速度快得多,所以你可以说在这种情况下使用循环对性能没什么影响。但是对于比N大得多的M,循环开销开始显示..