天天看點

python-numba庫python-numba庫1 numba介紹2.numba的安裝使用方法

python-numba庫

文章目錄

  • python-numba庫
  • 1 numba介紹
      • 為什麼選擇numba?
  • 2.numba的安裝使用方法
      • **安裝**

1 numba介紹

numba是一個用于編譯Python數組和數值計算函數的編譯器,這個編譯器能夠大幅提高直接使用Python編寫的函數的運算速度。

numba使用LLVM編譯器架構将純Python代碼生成優化過的機器碼,通過一些添加簡單的注解,将面向數組和使用大量數學的python代碼優化到與c,c++和Fortran類似的性能,而無需改變Python的解釋器。numba的編譯方式如下圖所示:

python-numba庫python-numba庫1 numba介紹2.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進行加速,一個沒有加速,我們看下他們的運作時間:

python-numba庫python-numba庫1 numba介紹2.numba的安裝使用方法

從結果中可以看出,當我們使用了numba進行加速,速度提升了10倍以上。

.