Jupyter Notebook中%time和%timeit的使用詳解
本文介紹 Jupyter Notebook 中用于計算運行時間的魔法命令 ( magic commands ) %time 和 %timeit 。
1.%time 或 %timeit:計算當前行的代碼運行時間。
%time 的計算結(jié)果包括:CPU time(CPU運行程序的時間), Wall time(Wall Clock Time,墻上掛鐘的時間,也就是我們感受到的運行時間)。
%timeit 計時更為精確,這一命令會運行代碼 r 次,每次 n 遍,再對 n*r 遍的結(jié)果取平均后,得到運行一遍代碼的時間。
舉個例子來看看吧,以列表的循環(huán)計算為例,先看 %time 的計算:
nums1=list(range(10000)) %time nums2=[i+5 for i in nums1]
這里我們用 %time 計算一下第二行代碼,也就是對列表中每個元素的值加 5 的運行時間,結(jié)果為:
Wall time: 998 µs
我的電腦上不知怎么回事,只顯示了 Wall time 。
再來看 %timeit 的計算:
nums1=list(range(10000)) %timeit nums2=[i+5 for i in nums1]
結(jié)果為:
645 µs ± 45.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
如上所示,使用 %timeit 計時會運行 r 次(默認值 r=7), 每一次運行 n 遍的 n 則是由系統(tǒng)根據(jù)代碼確定一個合適的值,這里 n=1000,最后對所有計時結(jié)果取平均得到運行一遍代碼的時間。
也可以使用 %timeit -r R -n N,以自定義的設(shè)置(運行R次,每一次N遍)來運行代碼并計時。例如:
nums1=list(range(10000)) %timeit -r 5 -n 400 nums2=[i+5 for i in nums1]
就是對代碼運行 5 次, 每次 400 遍,最后對所有計時結(jié)果取平均,得到運行一遍代碼的時間。結(jié)果如下:
705 µs ± 60.1 µs per loop (mean ± std. dev. of 5 runs, 400 loops each)
2.%%time 或 %%timeit:計算當前單元(cell)的代碼運行時間。
%%time 與 %time , %%timeit 與 %timeit 的計算方式相同,區(qū)別在于 % 是用于單行代碼的命令,%% 是應(yīng)用于當前單元的命令。
需要注意的是,%%time 或者 %%timeit 必須在當前單元的第一行。 并且,%%time 后不能跟代碼。例如:
%%time nums1=list(range(10000)) nums2=[i+5 for i in nums1]
結(jié)果為:
Wall time: 1.99 ms
%%timeit 后面可以跟代碼,這行代碼會運行、但不會計入時間,從第二行開始計時。例如:
%%timeit nums1=list(range(10000)) nums2=[i+5 for i in nums1]
結(jié)果為:
685 µs ± 47 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
可以看到,這一結(jié)果與前面使用行命令 %timeit 的結(jié)果相近,因為 %%timeit 之后的代碼nums1=list(range(10000)) 運行但是不計時。
再來看看 %%timeit 單獨放在第一行的結(jié)果:
%%timeit nums1=list(range(10000)) nums2=[i+5 for i in nums1]
結(jié)果為:
800 µs ± 52 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
這種情況下,會對代碼 nums1=list(range(10000)) 計時,因此運行時間更長一點。
參考:
1.Ipython幫助文檔對于 %time 和 %timeit的講解
2.stackoverflow關(guān)于 %timeit 的一個問答,介紹了 %timeit 和 %%timeit
到此這篇關(guān)于Jupyter Notebook中%time和%timeit的使用詳解的文章就介紹到這了,更多相關(guān)Jupyter Notebook %time和%timeit內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
總結(jié)網(wǎng)絡(luò)IO模型與select模型的Python實例講解
同步、異步、阻塞、非阻塞,當這些網(wǎng)絡(luò)IO名詞堆到一起時難免使編程初學者感到困惑,這里我們就來為大家總結(jié)網(wǎng)絡(luò)IO模型與select模型的Python實例講解:2016-06-06
python中的線程threading.Thread()使用詳解
這篇文章主要介紹了python中的線程threading.Thread()使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12
python打開url并按指定塊讀取網(wǎng)頁內(nèi)容的方法
這篇文章主要介紹了python打開url并按指定塊讀取網(wǎng)頁內(nèi)容的方法,涉及Python操作URL及網(wǎng)頁內(nèi)容的技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04
Python 數(shù)據(jù)結(jié)構(gòu)之隊列的實現(xiàn)
這篇文章主要介紹了Python 數(shù)據(jù)結(jié)構(gòu)之隊列的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-01-01
如何解決import torchvision報錯問題 DLL:找不到模塊
這篇文章主要介紹了如何解決import torchvision報錯問題 DLL:找不到模塊,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
python?Ajenti控制面板輕松地管理所有服務(wù)器網(wǎng)站
Ajenti是一個值得擁有的管理面板,免費開源的管理面板工具,可以幫助你集中管理多個服務(wù)器和網(wǎng)站,Ajenti?支持?Linux、BSD、Mac?OS?X和Windows?等多個操作系統(tǒng),并且可以通過一個直觀的?Web?界面來完成各種系統(tǒng)管理任務(wù)2024-01-01

