相关疑难解决方法(0)

IPython 的 %timeit 魔法的 -n 和 -r 参数

我想timeit在 Jupyter 笔记本中使用魔法命令对代码块计时。根据文档,timeit需要几个参数。两个特别控制循环次数和重复次数。我不清楚的是这两个论点之间的区别。例如

import numpy
N = 1000000
v = numpy.arange(N)

%timeit -n 10 -r 500 pass; w = v + v
Run Code Online (Sandbox Code Playgroud)

将运行 10 个循环和 500 次重复。我的问题是,

这可以解释为以下内容吗?(与实际计时结果有明显差异)

import time
n = 10
r = 500
T = numpy.empty(r)
for j in range(r):
    t0 = time.time()
    for i in range(n):
        w = v + v
    T[j] = (time.time() - t0)/n

print('Best time is {:.4f} ms'.format(max(T)*1000))
Run Code Online (Sandbox Code Playgroud)

我所做的一个假设很可能是不正确的,即内循环的时间是平均的 n通过这个循环迭代的。然后采用该循环的 500 次重复中最好的一次。

我搜索了文档,但没有找到任何可以准确说明这是做什么的。例如,这里的文档是

选项: -n:在循环中执行给定的语句次数。如果未给出此值,则选择一个拟合值。

-r:重复循环迭代次数并取最好的结果。默认值:3 …

python ipython jupyter

19
推荐指数
2
解决办法
3182
查看次数

%% timeit未返回定义的变量

我正在尝试使用IPython magic命令%%timeit,但遇到了一些问题。我尝试计时的块未返回我在其中定义的变量。

具体来说,假设我想衡量将变量var设置为30需要多长时间。

%%timeit
var = 5 * 6
Run Code Online (Sandbox Code Playgroud)

运行此块,我得到类似的信息16.8 ns ± 0.303 ns per loop (mean ± std. dev. of 7 runs, 100000000 loops each)。当我以后尝试调用var时,我得到了NameError: name 'var' is not defined

我发现了这个问题,但是,我不确定该如何处理。另外,这是从2014年开始的,因此我认为可能会有一些变化。

有没有一种方法可以“保留”在块中定义的变量,%%timeit以便以后可以调用它?

我正在使用Python 3.6,Anaconda 4.4.10。

python ipython timeit

5
推荐指数
1
解决办法
656
查看次数

标签 统计

ipython ×2

python ×2

jupyter ×1

timeit ×1