智慧交通day01-算法库01:numba
1 numba介紹
numba是一個(gè)用于編譯Python數(shù)組和數(shù)值計(jì)算函數(shù)的編譯器,這個(gè)編譯器能夠大幅提高直接使用Python編寫的函數(shù)的運(yùn)算速度。
numba使用LLVM編譯器架構(gòu)將純Python代碼生成優(yōu)化過的機(jī)器碼,通過一些添加簡單的注解,將面向數(shù)組和使用大量數(shù)學(xué)的python代碼優(yōu)化到與c,c++和Fortran類似的性能,而無需改變Python的解釋器。numba的編譯方式如下圖所示:
?為什么選擇numba?
選擇Numbade 原因很簡單,不需要為了獲得一些的加速來改變代碼,我們只需要添加一個(gè)裝飾器到Python函數(shù)中即可完成加速,而且加速效果與cython代碼相當(dāng)。
2.numba的使用方法
numba對代碼進(jìn)行加速時(shí),給要優(yōu)化的函數(shù)加上@jit優(yōu)化器即可。使用jit的時(shí)候可以讓numba來決定什么時(shí)候以及怎么做優(yōu)化。如下簡單的例子所示:
from numba import jit @jit def f(x, y):return x + y這段代碼的計(jì)算在被調(diào)用是第一次執(zhí)行,numba將在調(diào)用期間推斷參數(shù)類型,然后基于這個(gè)信息生成優(yōu)化后的代碼。numba也能夠基于輸入的類型編譯生成特定的代碼。例如,對于上面的代碼,傳入整數(shù)和浮點(diǎn)數(shù)作為參數(shù)將會生成不同的代碼:
?Numba編譯的函數(shù)可以調(diào)用其他編譯函數(shù)。 例如:
@jit def hypot(x, y):return math.sqrt(square(x) + square(y))我們現(xiàn)在看一個(gè)例子:
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)現(xiàn)在我們定義相同的方法,實(shí)現(xiàn)的功能也是一樣的,一個(gè)是利用numba進(jìn)行加速,一個(gè)沒有加速,我們看下他們的運(yùn)行時(shí)間:
?從結(jié)果中可以看出,當(dāng)我們使用了numba進(jìn)行加速,速度提升了10倍以上。
總結(jié)
總結(jié)
以上是生活随笔為你收集整理的智慧交通day01-算法库01:numba的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA中中文乱码问题解决方案
- 下一篇: 计算机网络对口题目,2011-2015计