如何从脚本运行IPython魔术(或计时Python脚本)

2024-04-30 06:38:20 发布

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

IPython%timeit magic命令在测量运行一些Python代码所需的时间方面做得很好。现在,我想在Python脚本中使用类似的东西。我知道timeit模块,但是它有几个缺点,例如,如何自适应地选择运行次数?i、 e.默认代码

import timeit
t=timeit.Timer("code(f)", "from __main__ import code,f")
t.timeit() 

运行代码一百万次。%timeit IPyhton magic命令会自动执行此操作。我建议我可以使用类似于MATLAB的代码 http://www.mathworks.com/matlabcentral/fileexchange/18798

这会自动完成所有的工作(同时也会告知函数的开销是否很大)。

如何从Python脚本调用%timeit magic(或者可能有更好的计时解决方案)?


Tags: 模块代码fromimport命令脚本mainmagic
3条回答

这取决于你的IPython版本。如果你有1.x:

from IPython import get_ipython
ipython = get_ipython()

如果您有旧版本:

import IPython.core.ipapi  
ipython = IPython.core.ipapi.get()

或者

import IPython.ipapi  
ipython = IPython.ipapi.get()

完成此操作后,请运行如下神奇命令:

ipython.magic("timeit abs(-42)")

请注意,脚本必须通过ipython运行。

当使用python -m timeit调用IPython和timeit模块时,以number的增长值执行同一个循环,直到计时结果超过某个阈值,从而确保时间测量基本上不受操作系统干扰。

您可以将IPython implementation of the ^{} magicPython ^{} standard module进行比较,以查看它们基本上是相同的。

因此,回答您的问题时,您可能应该复制相同的循环,直到找到number参数的正确值。

如果在IPython中以交互方式运行Python脚本,则以下操作有效。E、 g.,test.py

def f():
    # Algorithm 1
    pass

def g():
    # Algorithm 2
    pass

# which one is faster?
mgc = get_ipython().magic
mgc(u'%timeit f()')
mgc(u'%timeit g()')

然后在IPython中交互运行

%run -i test.py

说出时间。必须使用-i开关,以便变量在作用域中。如果不运行IPython实例,也就是从IPython导入timeit并将其用作函数,我就不知道如何做到这一点。但是,这个解决方案适合我的目的,即自动化一些计时运行。

相关问题 更多 >