【问题标题】:Can you capture the output of ipython's magic methods? (timeit)你能捕捉到 ipython 魔法方法的输出吗? (时间)
【发布时间】:2013-06-26 02:48:22
【问题描述】:

我想捕获并绘制 5 次左右 timeit 调用的结果,并以 N 的大小对数递增,以显示 methodX() 如何随输入缩放。

到目前为止我已经尝试过:

output = %timeit -r 10 results = methodX(N)

它不起作用...

在文档中也找不到信息。我觉得您至少应该能够拦截打印的字符串。之后我可以解析它以提取我的信息。

有人做过或尝试过吗?

PS:这是在 ipython 笔记本中,如果有差异的话。

【问题讨论】:

标签: ipython ipython-notebook timeit


【解决方案1】:

这个重复的问题Capture the result of an IPython magic function 有一个answer 证明这已经被实施了。

使用-o 选项调用%timeit 魔法,例如:

%timeit -o <statement>

返回一个TimeitResult 对象,它是一个简单的对象,其中包含有关%timeit 作为属性运行的所有信息。例如:

In [1]: result = %timeit -o 1 + 2
Out[1]: 10000000 loops, best of 3: 23.2 ns per loop

In [2]: result.best
Out[2]: 2.3192405700683594e-08

【讨论】:

  • 这似乎只适用于一些魔术命令(也许只是%timeit?)。它不适用于%%timeit。使用result = %%timeit -o 作为单元格的行返回None
  • @StevenC.Howell 您可以使用%%timeit -o 而不分配。它将返回一个 TimeitResult 对象,并且由于 IPython 的输出捕获,您可以通过访问 _ 来检索结果。
  • 来自timeit 的文档:“在单元格模式 (%%timeit) 中,第一行中的语句用作设置代码(已执行但未计时)并且单元格的主体是计时的. 单元格主体可以访问设置代码中创建的任何变量。” github.com/ipython/ipython/blob/…
  • 另外,如果你添加-q你不会正常输出。
【解决方案2】:

PS:这是在 ipython 笔记本中,如果有差异的话。

不,它没有。

在开发中,有 %%capture 细胞魔法。 另一种方法是修改 timeit 魔法以返回值而不是打印,或者使用 timeit 模块本身。欢迎使用补丁。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2021-08-03
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 2014-01-09
    相关资源
    最近更新 更多