簡體   English   中英

在ipython中使用timeit的問題

[英]Issues with using timeit in ipython

我正在快速嘗試在ipython, m1()m2()中計算2個函數,使用2個不同的實現執行相同的任務。

In [23]: %timeit for x in range(100): m1(a)
10000 loops, best of 3: 57.6 us per loop

In [24]: %timeit for x in range(100): m2(a)
10000 loops, best of 3: 108 us per loop

結果:第一次實施快了近2倍。 到現在為止還挺好。

出於好奇,我改變了上面的for循環的范圍,現在我不知道輸出的意義。

In [25]: %timeit for x in range(1): m2(a)
1000000 loops, best of 3: 1.29 us per loop

In [26]: %timeit for x in range(10): m2(a)
100000 loops, best of 3: 10.8 us per loop

In [27]: %timeit for x in range(1000): m2(a)
1000 loops, best of 3: 1.06 ms per loop

for循環到底在做什么? 為什么循環次數的值會隨着增加范圍值而減小?

PS:我用這個作為參考。 另外,如果標題沒有完全傳達我的問題,請將標題編輯為更好的標題。

timeit正在計算整個塊的執行時間。

所以你看到的是:

  • 運行m2(a) 1次需要1.29 us
  • 運行m2(a) 10次​​需要10.8 us
  • 運行m2(a) 1000次需要1.06 ms

這是有道理的,因為1.06ms = 1060 us ,大約是基線的1000倍(而10.8 us是基線的大約10倍)

至於循環次數,timeit旨在在合理的時間內運行:

$ python -mtimeit -h
...
If -n is not given, a suitable number of loops is calculated by trying
successive powers of 10 until the total time is at least 0.2 seconds.

所以我終於明白了發生了什么,感謝@Nirk的回答。

In [26]: %timeit for x in range(100): m2(a)
10000 loops, best of 3: 108 us per loop

這里,

%timeit => ipython魔術召喚

for x in range(100): m2(a) =>正在執行的語句。 根據范圍值,每次運行的執行時間增加/減少

10000 loops =>基於最小0.2 s總時間的timeit模塊約束,timeit將隱含運行的最小循環次數

best of 3: 108 us per loop =>按時間運行的最佳3循環所花費的平均時間。

假設每次運行的時間與最佳運行時間的平均值相同,則每次運行的時間= 108 us

需要的最小循環= 10^x ,其中x是滿足1.08 * (10^-4) * (10^x) > 2 * (10^-1)最小正整數

即, (10^x) > 1.85 * (10^3) => x = 4的最小x

因此,所需的最小循環= 10 ^ x = 10000 loops

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM