温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

在IPython中如何进行Python程序执行时间的测量方法

发布时间:2021-08-18 14:36:11 阅读:143 作者:小新 栏目:开发技术
Python开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

小编给大家分享一下在IPython中如何进行Python程序执行时间的测量方法,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

在写MATLAB的脚本的时候我时长会用tic、toc进行一下程序运行时间的测量。在Python中偶尔也会测试下,但是基本上都是靠使用time模块。接触了IPython之后突然间发现,原来程序执行时间的测试可以如此简单!

在IPython中,程序执行时间的测试是通过魔术函数来实现。这个功能的魔术函数有两个,一个是time,还有一个是timeit。后面这个功能与前面的功能类似,但是更为精确,因为测试采用了多次测试求取平均值的方式实现。

之前写了一个简单的测试小脚本,

#!/usr/bin/python
 
import numpy as np
from numpy.randomimport randn
 
data = {i :randn() for i in range(7)}

print(data)代码如下:

在IPython中测试记录如下:

In [21]: %time%run dict.py
{0:1.13561727024180551: -0.247250993351956552: -0.85660284727328413:-0.702786398137710840.856338337311660451.47902601141250256:0.45741003038960254}
Wall time0 ns
 
In [22]: %time%run dict.py
{0:0.46343082449979931: -0.216948170122791421.8442138697772023:-1.094285528197434: -0.316255372244055950.350529900922858246:-1.0779260478165211}
Wall time0 ns

这结果有点……

确实,这么简单的语句能够执行多少时间呢!何况现在用的本子还是标压处理器,又是I7计算最强芯。好,接下来改造一下,改成循环:

#!/usr/bin/python
 
import numpy as np
from numpy.randomimport randn
 
for i inrange(1000):
data = {i : randn() for i in range(7)}
print(data)

以上代码存储到新文件之后,在IPython中进行测试与记录。眼前闪过一大片输出,拷贝全部的记录不太可能了,截取部分结果如下:

{0:-0.83465624306940081: -0.508122669924342920.146906204271349153:-1.194701879660422740.52998845945659325: -0.117302396915297746:-0.008304349615949396}
{0:-0.50045585409467411: -2.2398823985997432: -0.48776114663949013:0.046790299413203354: -0.040619848844391875: -0.180267807980665666:0.2617579789690715}
{0:-0.84984962495798381: -0.346507722553153432: -0.70678220755425133:0.46753437777143294: -2.0950497166091935: -1.93966190174244266:1.4723754138476228}
{0:1.082945456296268810.365859364276602920.78250058738843923:-0.70242459576418864: -0.90834949084084395: -0.52253613436042946:0.2780526056846729}
Wall time: 2.67 s

这次的执行结果确实是挺长的,个人觉得主要的瓶颈应该还是在输出功能上吧!在用timeit测试一下,看看结果是否有大的变化。部分记录结果如下:

{0:1.188192277347432712.09570341595082120.77682516174167953:-0.36398015677946424: -1.215506902088682850.054548315263801876:0.521994301720664}
{0:0.09625730731797451: -0.691764190503716721.0211974339728553:0.415570147952150542.39339153889876851.37552580487473236:-0.5540780961303758}
{0:-0.41819939847811511.19739290268080942: -0.32436835936688463:-1.77657354710110644: -1.15675281742416775: -2.2971517505155446:1.6966820033283279}
1 loop, best of 3:1.68 s per loop

从上面的结果中可以看出,似乎这个结果也不是取均值(我看的教程中写的是取均值)。上面的结果提示中,测试进行了三次,而从三次中取出了一个最好的结果。跟之前的结果确实是有一定的差距。我再修改一下代码,把print改掉,看看是否print是一个时间消耗大户!代码如下:

#!/usr/bin/python
 
import numpy as np
from numpy.randomimport randn
 
for i inrange(1000):
data = {i : randn() for i in range(7)}
a = data

两种测试的结果分别如下:

Time测试:

In [28]: %time%run dict_loop_no_disp.py
Wall time15 ms
In [29]: %timeit%run dict_loop_no_disp.py
100 loopsbest of33.2 ms per loop

从上面的结果可看出,print确实是一个时间消耗大户!而从这组结果中,似乎有觉得我对timeit的输出理解有点偏了。直观上的理解,上次的测试似乎只有1次循环测试,但是得出了三个最好的成绩。而这次的测试进行了100个循环,得出了三个最好的成绩?是这样理解吗?

如何理解暂且不去深究了,总体说来是后面一种精确一点罢了!实际的使用中,用的时候大约还是不多,毕竟我的Python程序执行时间都少的几乎可以忽略。

看完了这篇文章,相信你对“在IPython中如何进行Python程序执行时间的测量方法”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×