作者lawrence022 (Lawrence022)
看板Python
標題[問題] timeit 測量程式 runtime
時間Thu Feb 15 21:26:03 2018
想請問一下
我寫了支程式命名為 test.py
裡面只是要計算138956167218765**342048
如果我用timeit來計算這行code的時間
結果會顯示幾微秒(事實上,執行這支程式的時間沒有這麼短)
但如果我是在command line上下time指令去量test.py的runtime
time python test.py
結果是8秒多
代表timeit測得的runtime並不正確囉?
用其他算時間的function(ex. time,datetime)結果也都跟timeit一樣
我想要寫一個能在程式裡面計算每個function的runtime
如果只能用time指令來計算的話
我只能知道這支程式總共的runtime而已
為什麼timeit得到的時間會跟time指令得到的時間不同呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.196.20
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1518701165.A.2A1.html
1F:→ uranusjr: timeit 只算你的 Python 程式碼的執行時間, time 是從外02/15 21:34
2F:→ uranusjr: 部看整個程式的執行時間, 從你下 python 指令到 Python02/15 21:34
3F:→ uranusjr: 準備好跑你的程式中間也是要時間的; 這就和你量紙箱尺寸02/15 21:34
4F:→ uranusjr: 內外長度會不一樣的道理一樣, 紙箱的材質本身也會佔體積02/15 21:35
我也這樣想過。
如果我寫一個modular exponential的function來計算的話(事實上我的計算後面有mod m)
用timeit顯示的也是幾微妙(但比**的方法慢,而time也是幾微秒(比**快)
所以我不知道到底應該算是用我的function快還是**快
※ 編輯: lawrence022 (180.217.196.20), 02/15/2018 21:49:35
※ 編輯: lawrence022 (180.217.196.20), 02/15/2018 21:52:56
5F:→ uranusjr: 要注意 time 有很多外部因素, 而且只算一次, 誤差會很大02/15 22:07
6F:→ uranusjr: 老實說我不懂你迷惑的點在哪, 很明顯 timeit 的結果合理02/15 22:08
應該說我疑惑的點是
程式的runtime不是應該會隨著計算的質改變而有不同嗎?
但我用timeit分別測
1234567**20481
1234567**204812
這兩筆不同質的運算
直覺來想後者runtime一定比較大
但實際測得前者的runtime較大
(前者0.019 後者0.012)
所以我才覺得timeit測runtime是不是不正確
用time就一定都是後者時間比較久
※ 編輯: lawrence022 (180.217.196.20), 02/15/2018 23:03:09
7F:→ uranusjr: 在形態相同的前提下, 執行時間和計算值並沒有直接關聯 02/15 23:20
8F:→ uranusjr: 誰教你越大就會算越久的你老實說我保證不揍他 02/15 23:20
9F:→ djshen: 會不會變大你也要看什麼會影響複雜度 02/16 04:39
10F:→ djshen: 可以去github翻code Objects/longobject.c的long_pow 02/16 04:39
11F:→ edwar: 你用time python時有用print顯示結果嗎?大數字要轉換成顯示 02/16 05:04
12F:→ edwar: 的結果也會很耗時間,timeit('print(1234567**204812)',numb 02/16 05:06
13F:→ edwar: er=1)和不用print就可以看出差異,除非python算大數字時中間 02/16 05:07
14F:→ edwar: 是用10進位在存計算過程和結果.另外,你用1234567**204812這 02/16 05:10
15F:→ edwar: 一個已經算是一個常數,計算的結果可能會被cache.可以改用 02/16 05:11
16F:→ edwar: timeit.timeit('a=1234567;b=20480;a**b',number=1) 再改不 02/16 05:12
17F:→ edwar: 同的number試看看執行時間 02/16 05:13
18F:推 p2p8ppp: U大好兇XDD 02/22 14:28