我有以下完美的代码:
from __future__ import division
from math import log, sqrt
from scipy.stats import norm
from datetime import datetime
#Default values used for testing
s1 = 10; s2 = 20
sigma1 = 1.25; sigma2 = 1.45
t = 0.5; rho = 0.89
rate=0.05; y=0; k0 = 0.000001
sigma = lambda sig1=sigma1, sig2=sigma2, corr=rho: sqrt(sig1**2+sig2**2 -2*corr*sig1*sig2)
m_d1 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: (log(stock1/stock2)+1/2*sigma()**2*time)/(sigma()*sqrt(time))
m_d2 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: m_d1() -sigma()*sqrt(time)
m_delta1 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: norm.cdf(m_d1())
m_delta2 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: -norm.cdf(m_d2())
m_gamma11 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: norm.pdf(m_d1())/(stock1*sigma()*sqrt(time))
m_gamma22 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: norm.pdf(m_d2())/(stock2*sigma()*sqrt(time))
m_gamma12 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho:-norm.pdf(m_d1())/(stock2*sigma()*sqrt(time))
m_theta = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: -stock1*sigma()*norm.pdf(m_d1())/(2*sqrt(time))
m_vega1 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: stock1*sqrt(t)*norm.pdf(m_d1())*((sig1-(corr*sig2))/sigma())
m_vega2 = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: stock1*sqrt(t)*norm.pdf(m_d1())*((sig2-(corr*sig1))/sigma())
m_correlation = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: -stock1*sqrt(t)*norm.pdf(m_d1())*((sig1*sig2)/sigma())
m_margrabe = lambda stock1=s1, stock2=s2, sig1=sigma1, sig2=sigma2, time=t, corr=rho: stock1*norm.cdf(m_d1())-stock2*norm.cdf(m_d2())
print "Margrabe = "+str(m_margrabe()) + "\n"
print "THE GREEKS \n"
print "Delta Asset 1 = "+str(m_delta1())
print "Delta Stock 2 = "+str(m_delta2()) +"\n"
print "Gamma Asset 11 = "+str(m_gamma11())
print "Gamma Stock 12 = "+str(m_gamma12())
print "Gamma Stock 22 = "+str(m_gamma22()) + "\n"
print "Theta = "+str(m_theta()) +"\n"
print "Vega sigma 1 = "+str(m_vega1())
print "Vega sigma 2 = "+str(m_vega2()) + "\n"
print "Correlation = "+str(m_correlation()) + "\n"
它工作得很好,但现在我想看看我的电脑运行这个程序需要多长时间。因此,在谷歌搜索问题后,我发现了 2 个替代方案:
1) 从 timeit 导入 Timer 。在我打印结果的部分,我添加了:
print "Margrabe = "+str(m_margrabe()) +"\n"
t1 = Timer(lambda: m_margrabe()).timeit(number=1)
print "THE GREEKS \n"
print "Delta Asset 1 = "+str(m_delta1())
t2 = Timer(lambda: m_delta1()).timeit(number=1)
print "Delta Stock 2 = "+str(m_delta2()) +"\n"
t3 = Timer(lambda: m_delta2()).timeit(number=1)
print "Gamma Asset 11 = "+str(m_gamma11())
t4 = Timer(lambda: m_gamma11()).timeit(number=1)
print "Gamma Stock 12 = "+str(m_gamma12())
t5 = Timer(lambda: m_gamma12()).timeit(number=1)
print "Gamma Stock 22 = "+str(m_gamma22()) +"\n"
t6 = Timer(lambda: m_gamma22()).timeit(number=1)
print "Theta = "+str(m_theta()) + "\n"
t7 = Timer(lambda: m_theta()).timeit(number=1)
print "Vega sigma 1 = "+str(m_vega1())
t8 = Timer(lambda: m_vega1()).timeit(number=1)
print "Vega sigma 2 = "+str(m_vega2()) +"\n"
t9 = Timer(lambda: m_vega2()).timeit(number=1)
print "Correlation = "+str(m_correlation()) + "\n"
t10 = Timer(lambda: m_correlation()).timeit(number=1)
print "Running Time = " + str(t1+t2+t3+t4+t5+t6+t7+t8+t9+t10)
这很好用:我得到Running Time = 0.00682769470029
2)从日期时间导入日期时间和:
startTime = datetime.now()
# Same code as before"
print(datetime.now()-startTime)
这也可以正常工作,我得到:0:00:00.010000
我的问题是:为什么两种方法不同?为什么我会得到不同的结果?有没有办法在一行中“计算运行时间”?
谢谢
更新:
def printit():
print "Margrabe = "+str(m_margrabe()) + "\n"
print "THE GREEKS \n"
print "Delta Asset 1 = "+str(m_delta1())
print "Delta Stock 2 = "+str(m_delta2()) +"\n"
print "Gamma Asset 11 = "+str(m_gamma11())
print "Gamma Stock 12 = "+str(m_gamma12())
print "Gamma Stock 22 = "+str(m_gamma22()) + "\n"
print "Theta = "+str(m_theta()) +"\n"
print "Vega sigma 1 = "+str(m_vega1())
print "Vega sigma 2 = "+str(m_vega2()) + "\n"
print "Correlation = "+str(m_correlation()) + "\n"
if __name__=='__main__':
printit()
所以我可以输入(我的文件保存为 time1.py)
python -m timeit -s "import time1; time1.main()"
但我收到一个错误:“属性错误:‘模块’对象没有属性‘主’