我正在尝试使用python 3.6。来自jupyter笔记本的程序,但似乎魔术命令%timeit
增加了很多额外的开销,给我错误的统计数据。
来自Jupyter笔记本:
%timeit a=1
10000000 loops, best of 3: 84.1 ns per loop
来自cmdline
python -m timeit 'a=1'
100000000 loops, best of 3: 0.0163 usec per loop
因此,在这种情况下,命令行timeit
的运行速度比jupyter笔记本timeit
快数百万倍。这是什么原因,有没有办法解决它,以便jupyter笔记本中的timeit
可以给出正确的测量值?
答案 0 :(得分:2)
您没有正确阅读这些数字。 IPython报告时间为纳秒(请注意ns
缩写)。 Python正在以微秒(usec
)报告时间。
1微秒是1000纳秒;归一化为纳秒,Python报告为16.3纳秒,因此速度只有5倍。
但是,我无法重现您的发现。在virtualenv中使用相同的Python二进制文件来运行IPython并直接运行:
venv-3.6 $ bin/ipython
Python 3.6.2 (default, Jul 18 2017, 14:26:50)
Type "copyright", "credits" or "license" for more information.
IPython 5.2.2 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: %timeit a=1
100000000 loops, best of 3: 11.9 ns per loop
In [2]:
Do you really want to exit ([y]/n)? y
venv-3.6 $ bin/python -m timeit 'a=1'
100000000 loops, best of 3: 0.0121 usec per loop
并且在Jupyter笔记本中,再次使用相同的virtualenv;这实际上驱动了ipython,所以没有真正的区别:
%timeit a=1
100000000 loops, best of 3: 11.8 ns per loop
那是11.9 vs 12.1 vs 11.8纳秒;太近了,不能称之为差异。