命令行中的Python timeit - 字符串中的大多数功能都没有定时

时间:2016-10-25 12:32:44

标签: python timeit

在浏览论坛和使用timeit的位和教程之后,我无法确定我的问题,但我确定我错过了一些重要的东西。

我正试图通过时间性能来获得下面的代码(稍微修改一下,只是一个说明性的例子):

PREDS="
import numpy as np
from ML import fit, predict
from utils.data_transform import features_squared_only

red_features = np.load('data/red_features.npy')
f_sq2r = features_squared_only(red_features)
query_sn = np.load('data/query_sn.npy')
q_sq2r = features_squared_only(query_sn)
l4 = np.load('data/red_mlabels4.npy')
W = fit(f_sq2r, l4)
preds = predict(q_sq2r, W)"

python -m timeit -v -s "PREDS"

给我这个:

10 loops -> 5.11e-06 secs
100 loops -> 4.39e-06 secs
1000 loops -> 1.27e-05 secs
10000 loops -> 8.47e-05 secs
100000 loops -> 0.000769 secs
1000000 loops -> 0.00792 secs
10000000 loops -> 0.0854 secs
100000000 loops -> 0.804 secs
raw times: 0.822 0.791 0.808
100000000 loops, best of 3: 0.00791 usec per loop

然而,这肯定是不正确的,甚至:

python -m timeit -v -s "1+2"

给出类似

的结果
100000000 loops, best of 3: 0.00781 usec per loop

更不用说,当我在上面的“PREDS”序列中包含印刷语句时,它只出现了8次(还有10 ^ 8'循环' - 可能相关?)。测量相同的代码,不包括导入,花了大约5秒的挂钟时间,所以似乎不太可能其他呼叫/等。可能已经被timeit排除,如果它实际上是时间上面的所有代码将加起来大约4.2秒。

很明显,我的大部分代码实际上都没有定时/测试,但我不确定是什么让它失效。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

-s选项没有按照您的想法行事; s表示设置。所以显然你只是用一些代码来设置你的计时器,但你实际上并没有计算任何

  

-s S--setup=S

     

最初要执行一次的语句(默认传递)

更重要的是,使用"PREDS"作为字符串并不能达到预期效果。我建议你为此编写一个脚本并将逻辑放入其中,而不是试图将所有内容都加入到终端中