问题 大多数IPython的“神奇功能”的工作对我罚款马上蝙蝠: %hist,%time,%prun等。然而,我注意到,%lprun无法IPython中找到,因为我想最初安装它。
%hist
%time
%prun
%lprun
尝试解决 然后,我发现我应该安装该line_profiler模块。我已经安装了此模块,但是似乎仍然无法使magic函数正常工作。如果我尝试调用%lprun,iPython仍然找不到该函数。如果我用全名(line_profiler.magic_lprun)调用它,则可以找到该函数,但根本无法使它正常工作。下面是我所做的示例(从“ Python for Data Analysis”一书中逐步学习):
line_profiler
iPython
(line_profiler.magic_lprun)
Python for Data Analysis”
成功使用 %prun [在:]
def add_and_sum(x, y): added = x + y summed = added.sum(axis=1) return summed x = randn(3000, 3000) y = randn(3000, 3000) add_and_sum(x, y)
有了这个,我得到了一个不错的答案,正如预期的那样:
[输出:]
array([-23.6223074 , -10.08590736, -31.2957222 , ..., -14.17271747, 63.84057725, -50.28469621])
而且我可以执行分析魔术功能%prun:
[在:]
%prun add_and_sum(x, y)
6 function calls in 0.042 seconds Ordered by: internal time ncalls tottime percall cumtime percall filename:lineno(function) 1 0.020 0.020 0.029 0.029 <ipython-input-27-19f64f63ba0a>:1(add_and_sum) 1 0.013 0.013 0.042 0.042 <string>:1(<module>) 1 0.009 0.009 0.009 0.009 {method 'reduce' of 'numpy.ufunc' objects} 1 0.000 0.000 0.009 0.009 _methods.py:16(_sum) 1 0.000 0.000 0.009 0.009 {method 'sum' of 'numpy.ndarray' objects} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
使用失败 %lprun 但是,当我尝试时%lprun,我什么也得不到:
%lprun -f add_and_sum add_and_sum(x, y)
ERROR: Line magic function `%lprun` not found.
而且,如果我尝试使用其标准名称调用该函数,那么它也将不起作用:
line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y)
line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y) ^ SyntaxError: invalid syntax
但是该库已正确导入,或者至少是这样写的:
<module 'line_profiler' from '/Users/<edit>/anaconda/lib/python2.7/site-packages/line_profiler-1.0b3-py2.7-macosx-10.5-x86_64.egg/line_profiler.pyc'>
line_profiler.magic_lprun
<function line_profiler.magic_lprun>
似乎还有一些我应该配置的东西,这样我添加的这些新魔术功能就可以被识别出来。我无法通过网络搜索找到任何东西。
我将Spyder作为IDE运行(仍然使用iPython作为控制台),但是我也直接在iPython和iPython Notebook中对其进行了尝试。我没有任何形式的运气。
要进行%lprun工作,您需要使用以下命令将扩展加载到会话中:
In [1]: %load_ext line_profiler
查看此笔记本,查看一些使用魔术的示例。
此外,如果您正在使用Spyder,则还有一个第三方line_profiler插件