使用time.time()定时一个函数经常返回0秒

2024-06-24 12:58:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须在我的一个类中对一个算法的实现进行计时,我正在使用时间。时间()执行此操作。在实现它之后,我必须在包含大小数据集的大量数据文件上运行该算法,以便正式分析其复杂性。在

不幸的是,在小数据集上,我得到了0秒的运行时间,即使我在查看大数据集的运行时得到了0.000000000000000001的精度,我不能相信它真的比小数据集的运行时间少。在

我的问题是:使用这个函数是否有问题(如果有,我可以使用另一个精度更高的函数)?还是我做错了什么?在

这是我的代码,如果你需要的话:

import sys, time
import random

from utility import parseSystemArguments, printResults

...

def main(ville):
    start = time.time()

    solution = dynamique(ville) # Algorithm implementation

    end = time.time()

    return (end - start, solution)

if __name__ == "__main__":
    sys.argv.insert(1, "-a")
    sys.argv.insert(2, "3")

    (algoNumber, ville, printList) = parseSystemArguments()

    (algoTime, solution) = main(ville)

    printResults(algoTime, solution, printList)

printResults函数:

^{pr2}$

Tags: 数据函数import算法timemainsys时间
2条回答

我的问题的解决方案是使用timeit模块而不是time模块。在

import timeit

...

def main(ville):
    start = timeit.default_timer()

    solution = dynamique(ville)

    end = timeit.default_timer()

    return (end - start, solution)

不要将系统时间的分辨率与浮点数的分辨率混淆。计算机上的时间分辨率只有在系统时钟更新时才会频繁。系统时钟的更新频率因机器而异,因此为了确保您看到时间的差异,您需要确保它执行一毫秒或更长时间。试着把它放入这样一个循环中:

start = time.time()

k = 100000
for i in range(k)
    solution = dynamique(ville)

end = time.time()

return ((end - start)/k, solution)

最后,你需要除以循环迭代的次数来知道你的代码一次运行了多长时间。您可能需要增加k以更好地度量执行时间,或者,如果您的计算机在循环中运行了很长时间,则可能需要减小k。在

相关问题 更多 >