栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python运行时间评估: timeit module

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python运行时间评估: timeit module

print( tCost for mycode1: , timeit.timeit(setup mysetup1, stmt mycode1, number 1000) ) print( tCost for mycode2: , timeit.timeit(setup mysetup2, stmt mycode2, number 1000) ) print( tCost for mycode3: , timeit.timeit(setup mysetup3, stmt mycode3, number 1000) )

运行结果

        tCost for mycode1:  0.12879980000070645
        tCost for mycode2:  0.7638708999984374
        tCost for mycode3:  0.05968639999991865

        这个例子比较了python内置的math.sqrt()函数与numpy.sqrt()的运行速度差异。

        令人意外的是 以标量形式进行运算的话 numpy.sqrt()竟然比math.sqrt()还要慢很多 此种必有蹊跷 回头再另行调查。

4. timeit.repeat()

        调用方式 timeit.repeat(stmt, setup, timer, number, repeat)      

        Timeit.repeat()在timeit.timeit()的基础上又追加了一个repeat参数 用于指定重复次数。

        老实讲 不明白为什么 把number*repeat设定给number然后调用timeit.timeit()有什么不好吗 不过 当然必须相信库开发者这样设计总是有它的道理的。搜了一艘 查到这么一个帖子

        what is diffrence between number and repeat in python timeit? - Stack Overflow

        虽然隐约觉得明白了一些 但是还是不足以以自己的语言来解释一番 就不“为赋新词强说愁”了 等理解透彻并且自信能够解释清楚后再回来补课。先看例子吧

# Example3, timeit.repeat()
print( nExample3: ... )
mysetup3 
from math import sqrt
def example3(N):
 mylist []
 for k in range(N):
 mylist.append(sqrt(k))
mycode3 
example3(1000)
print( tCost for mycode3: , timeit.repeat(setup mysetup3, stmt mycode3, number 1000, repeat 100) )

运行结果

Example3: ...
tCost for mycode3:  [0.12954869999884977, 0.13357629999882192, 0.1325503000007302, 0.1383346000002348, 0.13686260000031325, 0.1361642000010761, 0.13500720000229194, 0.1356378999989829, 0.13645919999908074, 0.1313538000031258]

        与timeit.timeit只给出一个结果不同的是 timeit.repeat()将每次repeat看作是一次独立的统计 总共给出的repeat指定次数的结果。基于这repeat个样本数据可以方便进行更深入的统计分析 比如说最大值、最小值、均值、标准差、直方图等等等等blabla。。。 超出了本文的范围 就此打住

    以上例子中还顺便还给出将待评估的代码 如果多行的话 封装为一个函数 从setup参数中导入 然后在stmt中值导入对函数的调用 提供了更进一步的灵活性。

5. 命令行使用

        比如说 在Anacondaprompt(当然其它命令行终端应该也是一样 只要能运行python就行)执行以下命令

        python -m timeit -s from math import sqrt -n 10000 -r 10 x sqrt(12345678)

        其中 -m是用于指定模块名 -s, -n, -r则分别对应timeit.repeat()函数的setup, number和repeat参数 最后的’’中的代码即是对应stmt参数的指定内容了。

        此外在IPython环境下还可以用一下魔术命令的方式调用timeit:

        import numpy as np

        %timeit np.sqrt(123456789)

运行结果

        705 ns ± 2.66 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

 

        另外关于python中的time模块的使用方法 请参考         Python运行时间评估: time modulehttps://blog.csdn.net/chenxy_bwave/article/details/119458690

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/267577.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号