通過numba模塊給Python代碼提速的方法詳解
簡介:numba是Anaconda公司開發(fā)的針對Python的開源JIT編譯器,用于提供Python版CPU和GPU編程,速度比原生Python快數(shù)十倍。numba是第三方庫,可以在運(yùn)行時(shí)將Python代碼編譯為本地機(jī)器指令,而不會強(qiáng)制大幅度的改變普通的Python代碼,使得在部分場景下執(zhí)行Python的效率得到飛速的提升。
工作原理對比:
Python文件執(zhí)行過程
1、.py文件通過解釋器轉(zhuǎn)化為虛擬機(jī)可以執(zhí)行的字節(jié)碼(.pyc);字節(jié)碼在虛擬機(jī)上執(zhí)行,得到結(jié)果。
2、字節(jié)碼是一種只能運(yùn)行在虛擬機(jī)上的文件,默認(rèn)后綴.pyc,Python生成.pyc之后一般放在內(nèi)存中繼續(xù)使用,并不是每次都將.pyc文件保存到磁盤上。
而在JIT(Just-In-Time)技術(shù)中,JIT編譯器將Python源代碼.py直接編譯成機(jī)器可以執(zhí)行的機(jī)器語言(機(jī)器碼),就可以直接在CPU等硬件上運(yùn)行。這樣,JIT就跳過了原來的虛擬機(jī),執(zhí)行速度幾乎與用C語言編程速度無差別。
numba是Anaconda公司開發(fā)的針對Python的開源JIT編譯器。谷歌開源的jax庫也是屬于jit編譯器之一,該模塊則主要應(yīng)用于科學(xué)計(jì)算和機(jī)器學(xué)習(xí)方向。
安裝:如網(wǎng)絡(luò)限制,請繞道國內(nèi)鏡像豆瓣源,清華源等。pip安裝第三方庫全攻略:普通安裝、安裝whl后綴文件、使用國內(nèi)鏡像安裝
pip install numba
使用方法:
from numba import jit 對函數(shù)進(jìn)行裝飾@jit(nopython=True)
注意事項(xiàng):numba只符合部分場景,特殊場景無法使用。例如機(jī)器學(xué)習(xí)訓(xùn)練數(shù)據(jù)時(shí),不能簡單的進(jìn)行裝飾使用,否則會拋出異常。
源碼:
from numba import jit import datetime def calc_sum1(loop): ? ? n = 0 ? ? for i in range(loop): ? ? ? ? for j in range(loop): ? ? ? ? ? ? n += j ? ? return n @jit(nopython=True) def calc_sum2(loop): ? ? n = 0 ? ? for i in range(loop): ? ? ? ? for j in range(loop): ? ? ? ? ? ? n += j ? ? return n @jit(nopython=True) def calc_sum2(loop): ? ? n = 0 ? ? for i in range(loop): ? ? ? ? for j in range(loop): ? ? ? ? ? ? n += j ? ? return n if __name__ == '__main__': ? ? print(datetime.datetime.now()) ? ? r1 = calc_sum1(10000) ? ? print(r1) ? ? print(datetime.datetime.now()) ? ? print("*" * 30) ? ? print(datetime.datetime.now()) ? ? r2 = calc_sum2(10000) ? ? print(r2) ? ? print(datetime.datetime.now())
結(jié)果對比:原始代碼執(zhí)行需要花費(fèi)5秒左右,而使用numba裝飾后僅需300毫秒左右,提升10倍有余。如果loop設(shè)置的參數(shù)更長,numba裝飾后執(zhí)行的結(jié)果更佳。
到此這篇關(guān)于通過numba模塊給Python代碼提速的方法詳解的文章就介紹到這了,更多相關(guān)Python numba代碼提速內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python發(fā)送網(wǎng)絡(luò)請求(requests)
這篇文章主要介紹了Python發(fā)送網(wǎng)絡(luò)請求(requests),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09python 批量修改/替換數(shù)據(jù)的實(shí)例
今天小編就為大家分享一篇python 批量修改/替換數(shù)據(jù)的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07python實(shí)現(xiàn)對服務(wù)器腳本敏感信息的加密解密功能
這篇文章主要介紹了python實(shí)現(xiàn)對服務(wù)器腳本敏感信息的加密解密功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08Python decorator攔截器代碼實(shí)例解析
這篇文章主要介紹了Python decorator攔截器代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04django項(xiàng)目中使用云片網(wǎng)發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn)
這篇文章主要介紹了django項(xiàng)目中使用云片網(wǎng)發(fā)送短信驗(yàn)證碼的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01