2017-06-06 77 views
0

如果您想以最简单的方式使用timeit()进行快速测试,那么大多数情况下,如果您将其用作单元格中的唯一行并将函数调用放入该单元格,它就会起作用,如下所示:Jupyter Notebooks上的timeit()中的不一致性我使用Jupyter笔记本和Python 3.6一起使用Jupyter Notebooks

timeit(raiseTo600(6623)) 

如果你把这么多,因为与命令相同的单元格批注,你会得到一个错误,这就是为什么被称为在先前的小区被定义功能(把它诠释同一个小区,你得到一个错误)。

即使这种行为(它的工作原理)也不是100%一致的。随机地,可能会发生错误并清除它们,您必须重新启动内核,然后再次运行。

我看过在线示例,它接受了timeit()(引用内的多行代码)内的单个函数调用。我想在代码的单元格中添加注释,并且认为由于我得到的注释中的错误是timeit没有被识别,所以可能包括一个import语句会修复它。但尝试再次做到这一点触发错误:

代码:

from timeit import timeit 
timeit(raiseTo600(6623)) 

输出:

ValueError: stmt is neither a string nor callable 

引号内把它创建即使函数是在先前的小区运行这个错误,是工作正常。修改后的代码:

from timeit import timeit 
timeit('raiseTo600(6623)') 

输出:

NameError: name 'raiseTo600' is not defined 

这应该是简单易用。这里出了什么问题?

我已经具有多种功能的测试,这一点,得到了相同的症状,但为了完整性,下面是简单的一个我试图为什么timeit()不工作使用只摇出:

def raiseTo600(x): 
    return x**600 

回答

0

在Jupyter笔记本电脑,最好使用内置%%timeit魔法:

In [1]: 
     %%timeit -n 1000 def raiseTo600(x): return x**600 
     raiseTo600(6623) 

Out [1]: 
     7.59 µs ± 699 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each) 

细胞的第一行被执行,但不定时。您可以设置timeit的标志和/或运行设置代码(例如定义您的功能)。然后细胞的主体循环并计时。

Jupyter docs:一个Python语句或表达

用法

%timeit时间执行中,管线模式:

%timeit [-n -r [-t | -c] -q -p -o]语句

或在单元模式下:

%% timeit [-n -r [-t | -c] -q -p -o] setup_code

代码

代码...

时间的执行使用timeit模块的Python语句或表达式。这个函数既可以作为行和单元格的魔法使用:

在行模式中,您可以为单行语句(尽管可以使用分号链接多个语句)计时。 在单元模式下,第一行中的语句被用作设置代码(已执行但未定时),并且单元的主体被定时。单元体可以访问在设置代码中创建的任何变量。