python-numba庫
文章目錄
- python-numba庫
- 1 numba介紹
-
-
- 為什麼選擇numba?
-
- 2.numba的安裝使用方法
-
-
- **安裝**
-
1 numba介紹
numba是一個用于編譯Python數組和數值計算函數的編譯器,這個編譯器能夠大幅提高直接使用Python編寫的函數的運算速度。
numba使用LLVM編譯器架構将純Python代碼生成優化過的機器碼,通過一些添加簡單的注解,将面向數組和使用大量數學的python代碼優化到與c,c++和Fortran類似的性能,而無需改變Python的解釋器。numba的編譯方式如下圖所示:
為什麼選擇numba?
雖然有 cython 和 Pypy 之類的許多其他編譯器,選擇Numbade 原因很簡單,不必離開 python 代碼的舒适區,不需要為了獲得一些的加速來改變您的代碼,我們隻需要添加一個裝飾器到Python函數中即可完成加速,而且加速效果與cython代碼相當。
2.numba的安裝使用方法
安裝
pip install numba
numba對代碼進行加速時**,給要優化的函數加上@jit優化器即可**。使用jit的時候可以讓numba來決定什麼時候以及怎麼做優化。如下簡單的例子所示:
from numba import jit
@jit
def f(x, y):
return x + y
print(f(1,2))
print(f(1.5,2))
這段代碼的計算在被調用是第一次執行,numba将在調用期間推斷參數類型,然後基于這個資訊生成優化後的代碼。numba也能夠基于輸入的類型編譯生成特定的代碼。例如,對于上面的代碼,傳入整數和浮點數作為參數将會生成不同的代碼。
我們現在看一個例子:
from numba import jit
import time
@jit
def foo():
x = []
for a in range(100000000):
x.append(a)
def foo_withoutfit():
y = []
for b in range(100000000):
y.append(b)
現在我們定義相同的方法,實作的功能也是一樣的,一個是利用numba進行加速,一個沒有加速,我們看下他們的運作時間:
從結果中可以看出,當我們使用了numba進行加速,速度提升了10倍以上。
.