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

Can*_*den 7 python jupyter

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

你能帮我一下吗?

谢谢。

Dun*_*nes 10

没有办法存储%time魔法的结果,但你可以存储魔法的结果%timeit。魔法timeit更加可配置。因此,如果您希望它的行为与%time您需要配置的完全一样,请这样做。-n1 -r1 and -o在以下代码中使用了参数。这里的-n1意思是在循环中运行代码 n (1) 次。-r1表示运行循环r(1)次并取最好的结果。您不需要使用这些标志,它们只是意味着您会更快地获得结果。如果您确实使用它们,那么结果将更具代表性。魔法会尝试为n和选择合理的值r。这意味着无论您的代码有多快或多快,您都应该在大约相同的时间内获得结果。因此,您可能不想使用它们。最后,-o意味着返回一个结果对象(而不是仅仅打印结果)。

\n\n

例如。

\n\n
In [1]: result = %timeit -n1 -r1 -o sum(range(1000000))\n\n53.7 ms \xc2\xb1 0 ns per loop (mean \xc2\xb1 std. dev. of 1 run, 1 loop each)\n\nIn [2]: print(result)\n        print(result.average)\n\n        53.7 ms \xc2\xb1 0 ns per loop (mean \xc2\xb1 std. dev. of 1 run, 1 loop each)\n        0.05373367803767323\n
Run Code Online (Sandbox Code Playgroud)\n\n

单元魔法有点复杂,因为你不能直接分配它的结果。

\n\n
In [1]: %%timeit -o \n        sum(range(1000000))\n\n        24.8 ms \xc2\xb1 1.18 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 10 loops each)\n\nOut[1]: <TimeitResult : 24.8 ms \xc2\xb1 1.18 ms per loop (mean \xc2\xb1 std. dev. of 7 runs, 10 loops each)>\n\nIn [2]: result = _  # or result = Out[1]\n
Run Code Online (Sandbox Code Playgroud)\n


dhe*_*inz 4

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

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))
Run Code Online (Sandbox Code Playgroud)

然后运行如下:

start = time.time()
...
...
end = time.time()
exec_time(start,end)
Run Code Online (Sandbox Code Playgroud)

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