在 Jupter Notebook 上,我试图比较两种方法查找最大值索引所花费的时间。
在图像中,第一个函数花费了 1000 个循环,第二个函数花费了 10000 个循环,这是循环的增加吗由于方法本身或 Jupyter 只是添加了更多循环以获得每个循环更准确的时间,即使第二个函数可能只花了 1000,是这种情况吗?
是的,你说对了。Jupyter Notebook 中的
%timeit
魔法函数旨在通过动态调整循环次数以获得尽可能可靠的计时测量结果。
%timeit
如何工作
-
初始测量:
%timeit
首先使用少量循环运行的代码。 -
时间阈值:
它有一个内置的时间阈值(通常为几毫秒)。如果初始运行低于此阈值,
%timeit
会增加循环次数并再次运行代码。 - 目标精度: 此过程会重复进行,直到总执行时间超过阈值,从而确保计时结果足够可靠,并且不太可能受到微小性能波动的影响。
的情况
在的情况下,第二个函数(使用
enumerate
和列表推导)可能比第一个函数(使用
index
方法)效率更高。这意味着第二个函数的每次循环完成速度更快。
%timeit
检测到第二个函数的快速执行,并增加了循环次数,以获得与第一个函数类似的总执行时间,从而提高计时测量的精度。
结论
循环次数的差异并不表示第二个函数执行的循环次数实际上更多。这表明
%timeit
正在调整循环次数以获得两个函数的可靠和可比较的计时测量结果。第二个函数实际上可能快得多,
%timeit
只是确保通过运行更多循环来提供准确的测量结果。