看板 Python 關於我們 聯絡資訊
想請問一下 我寫了支程式命名為 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://www.ptt.cc/bbs/Python/M.1518701165.A.2A1.html
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
galeondx: https://tinyurl.com/yadsk3lo 03/06 04:43