如何在Jupyter中的变量中存储%% time值?

时间:2018-10-10 11:00:02

标签: python jupyter

我想知道在Jupyter中工作的单元的CPU时间。我将%% time放在单元格的顶部。它打印出墙上的时间。但是我无法将此时间值存储在变量中吗?

您能帮我吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

您还可以定义自己的函数,该函数在单元格的开头和结尾接收时间戳。例如:

import time
def exec_time(start, end):
   diff_time = end - start
   m, s = divmod(diff_time, 60)
   h, m = divmod(m, 60)
   s,m,h = int(round(s, 0)), int(round(m, 0)), int(round(h, 0))
   print("Execution Time: " + "{0:02d}:{1:02d}:{2:02d}".format(h, m, s))

然后运行如下:

start = time.time()
...
...
end = time.time()
exec_time(start,end)

这将以hh:mm:ss格式打印出执行时间。

答案 1 :(得分:1)

无法存储%time魔术的结果,但是您可以存储%timeit魔术的结果。 timeit的魔力更具可配置性。因此,如果您希望它的行为与%time完全相同,则需要对其进行配置。在以下代码中,使用了参数-n1 -r1 and -o。这里的-n1意味着循环运行代码n(1)次。 -r1表示运行循环r(1)次并获得最佳结果。您不需要使用这些标志,它们只是意味着您将更快地得到结果。如果您确实使用它们,那么结果将更具代表性。魔术将尝试根据定时代码的快慢选择nr的合理值。这意味着无论您的代码有多快,都应该在大约相同的时间得到结果。因此,您可能不想使用它们。最后,-o表示返回结果对象(与仅打印结果相反)。

例如

In [1]: result = %timeit -n1 -r1 -o sum(range(1000000))

53.7 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)

In [2]: print(result)
        print(result.average)

        53.7 ms ± 0 ns per loop (mean ± std. dev. of 1 run, 1 loop each)
        0.05373367803767323

细胞魔术有点复杂,因为您无法直接分配其结果。

In [1]: %%timeit -o 
        sum(range(1000000))

        24.8 ms ± 1.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

Out[1]: <TimeitResult : 24.8 ms ± 1.18 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)>

In [2]: result = _  # or result = Out[1]