我想知道在Jupyter中工作的单元的CPU时间。我将%% time放在单元格的顶部。它打印出墙上的时间。但是我无法将此时间值存储在变量中吗?
您能帮我吗?
谢谢。
答案 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)次并获得最佳结果。您不需要使用这些标志,它们只是意味着您将更快地得到结果。如果您确实使用它们,那么结果将更具代表性。魔术将尝试根据定时代码的快慢选择n
和r
的合理值。这意味着无论您的代码有多快,都应该在大约相同的时间得到结果。因此,您可能不想使用它们。最后,-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]