python 运行时间表_在Python中查找运行时间

本文介绍如何在Python中测量代码的运行时间,通过`timeit`模块和`datetime`模块实现。作者展示了两种方法并比较了它们的结果,同时讨论了两者之间的差异,并提供了在命令行使用`timeit`模块的示例。
摘要由CSDN通过智能技术生成

我有以下完美的代码:

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)

这很好:我得到运行时间= 0.00682769470029

2)从datetime导入datetime和:

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()"

但出现错误:“属性错误:'模块'对象没有属性'主要'

解决方案

您无需测量或更改程序中的任何内容即可对其进行测量。在命令行中

python -m timeit -s "import mymodule; mymodule.main()"

会告诉您模块的运行时间main()。修改该语句以准确衡量您的需求。

来自timeit和datetime的结果之间的差异大概是因为datetime支持的精度较低,但是应该具有微秒级的精度,因此我不能肯定地说。无论如何,timeit是完成当前工作的正确工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值