2017-09-05 65 views
4

我在IPythonIPython%timeit什麼是循環和迭代的選項?

琢磨一下%timeit命令從docs

%timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] setup_code 

選項:

-n:在一個循環中執行給定的語句倍。如果沒有給出這個值,則選擇一個擬合值。

-r:重複循環迭代次數並獲得最佳結果。默認值:3

例如,如果我寫的:

%timeit -n 250 -r 2 [i+1 for i in range(5000)] 

所以,-n 250執行[i+1 for i in range(5000)] 250倍?那麼-r 2是什麼?

+0

它兩次運行250. – pvg

+1

爲什麼運行兩次250次運行?我不明白爲什麼會提供這些選項的邏輯。 – bner341

+0

什麼不清楚? – pvg

回答

3

它指定重複次數,重複次數用於確定平均值。例如:

%timeit -n 250 a = 2 
# 61.9 ns ± 1.01 ns per loop (mean ± std. dev. of 7 runs, 250 loops each) 

%timeit -n 250 -r 2 a = 2 
# 62.6 ns ± 0 ns per loop (mean ± std. dev. of 2 runs, 250 loops each) 

執行次數將是n * r但統計是基於repeatsr)的數目,但「循環」的每個重複的數目是基於所述numbern)來確定的。

基本上你需要足夠大的n這樣的循環數的最小準確「夠用」來表示最快的執行時間,但你也需要有足夠大的r以獲取有關如何守信準確的「統計」 「最快的執行時間」度量是(特別是如果您懷疑可能會發生某些緩存)。

對於淺表的時序,你應該始終使用r357(在這足夠大的大多數情況下),然後選擇n儘可能高 - 但不能太高,你可能希望它在一個合理的時間內完成:-)

1
timeit -n 250 <statement> 

該語句將得到執行3 * 250 = 750倍(-r具有3一默認值)

timeit -n 250 -r 4 <statement> 

該語句將得到執行4×250 = 1000次

-r - 多少次重複計時器(在上面的例子中,每個定時器被調用-n 250時,這意味着250個執行)