通過numba模塊給Python代碼提速的方法詳解
簡介:numba是Anaconda公司開發(fā)的針對Python的開源JIT編譯器,用于提供Python版CPU和GPU編程,速度比原生Python快數(shù)十倍。numba是第三方庫,可以在運行時將Python代碼編譯為本地機器指令,而不會強制大幅度的改變普通的Python代碼,使得在部分場景下執(zhí)行Python的效率得到飛速的提升。
工作原理對比:
Python文件執(zhí)行過程
1、.py文件通過解釋器轉(zhuǎn)化為虛擬機可以執(zhí)行的字節(jié)碼(.pyc);字節(jié)碼在虛擬機上執(zhí)行,得到結(jié)果。
2、字節(jié)碼是一種只能運行在虛擬機上的文件,默認后綴.pyc,Python生成.pyc之后一般放在內(nèi)存中繼續(xù)使用,并不是每次都將.pyc文件保存到磁盤上。
而在JIT(Just-In-Time)技術中,JIT編譯器將Python源代碼.py直接編譯成機器可以執(zhí)行的機器語言(機器碼),就可以直接在CPU等硬件上運行。這樣,JIT就跳過了原來的虛擬機,執(zhí)行速度幾乎與用C語言編程速度無差別。
numba是Anaconda公司開發(fā)的針對Python的開源JIT編譯器。谷歌開源的jax庫也是屬于jit編譯器之一,該模塊則主要應用于科學計算和機器學習方向。
安裝:如網(wǎng)絡限制,請繞道國內(nèi)鏡像豆瓣源,清華源等。pip安裝第三方庫全攻略:普通安裝、安裝whl后綴文件、使用國內(nèi)鏡像安裝
pip install numba
使用方法:
from numba import jit 對函數(shù)進行裝飾@jit(nopython=True)
注意事項:numba只符合部分場景,特殊場景無法使用。例如機器學習訓練數(shù)據(jù)時,不能簡單的進行裝飾使用,否則會拋出異常。

源碼:
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í)行需要花費5秒左右,而使用numba裝飾后僅需300毫秒左右,提升10倍有余。如果loop設置的參數(shù)更長,numba裝飾后執(zhí)行的結(jié)果更佳。

到此這篇關于通過numba模塊給Python代碼提速的方法詳解的文章就介紹到這了,更多相關Python numba代碼提速內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python+OpenCV檢測燈光亮點的實現(xiàn)方法
這篇文章主要介紹了Python+OpenCV檢測燈光亮點的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11
Matplotlib直方圖繪制中的參數(shù)bins和rwidth的實現(xiàn)
本文主要介紹了Matplotlib直方圖繪制中的參數(shù)bins和rwidth的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-02-02
深入理解Python中的函數(shù)參數(shù)傳遞機制
在Python中,對于函數(shù)的參數(shù)傳遞,有兩種主要的方式:傳值和傳引用。事實上,Python的參數(shù)傳遞是一種“傳對象引用”的方式,本文呢我們將詳細介紹Python的函數(shù)參數(shù)傳遞機制,這對理解Python編程語言的底層實現(xiàn)以及優(yōu)化你的代碼都非常有幫助2023-07-07
Python 數(shù)據(jù)結(jié)構(gòu)之旋轉(zhuǎn)鏈表
這篇文章主要介紹了Python 數(shù)據(jù)結(jié)構(gòu)之旋轉(zhuǎn)鏈表的相關資料,需要的朋友可以參考下2017-02-02

