→ uranusjr: timeit 只算你的 Python 程式碼的執行時間, time 是從外02/15 21:34
→ uranusjr: 部看整個程式的執行時間, 從你下 python 指令到 Python02/15 21:34
→ uranusjr: 準備好跑你的程式中間也是要時間的; 這就和你量紙箱尺寸02/15 21:34
→ 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
→ uranusjr: 要注意 time 有很多外部因素, 而且只算一次, 誤差會很大02/15 22:07
→ 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
→ uranusjr: 在形態相同的前提下, 執行時間和計算值並沒有直接關聯 02/15 23:20
→ uranusjr: 誰教你越大就會算越久的你老實說我保證不揍他 02/15 23:20
→ djshen: 會不會變大你也要看什麼會影響複雜度 02/16 04:39
→ djshen: 可以去github翻code Objects/longobject.c的long_pow 02/16 04:39
→ edwar: 你用time python時有用print顯示結果嗎?大數字要轉換成顯示 02/16 05:04
→ edwar: 的結果也會很耗時間,timeit('print(1234567**204812)',numb 02/16 05:06
→ edwar: er=1)和不用print就可以看出差異,除非python算大數字時中間 02/16 05:07
→ edwar: 是用10進位在存計算過程和結果.另外,你用1234567**204812這 02/16 05:10
→ edwar: 一個已經算是一個常數,計算的結果可能會被cache.可以改用 02/16 05:11
→ edwar: timeit.timeit('a=1234567;b=20480;a**b',number=1) 再改不 02/16 05:12
→ edwar: 同的number試看看執行時間 02/16 05:13
推 p2p8ppp: U大好兇XDD 02/22 14:28