今天來就來談談numba這個寶貝。對你沒看錯,不是numpy,就是numba。(推薦學習:Python視頻教程)
numba是Python的即時編譯器,它最適用于使用NumPy數組和函數以及循環的代碼。使用Numba的最常用方法是通過其裝飾器集合,可以應用于您的函數來指示Numba編譯它們。當調用Numba修飾函數時,它被編譯為機器代碼“及時”執行,并且您的全部或部分代碼隨后可以以本機機器代碼速度運行!
在面對一個計算project的時候,我們最容易想到的就是直接碼代碼,最后寫出一個超長的程序。這樣一來,一旦出錯往往就需要花很多時間定位問題。
有一個簡單的辦法解決這個問題,就是定義各種各樣的函數,把任務分解成很多小部分。因為每個函數都不是特別復雜,并且在寫好的時候就可以隨時檢查,因此簡潔的主程序一旦出問題就很容易定位并解決。面向對象編程的思想就是基于函數。
寫好函數之后,還可以使用裝飾器(decorator)讓它變得強大。裝飾器本身是一個函數,不過是函數的函數,目的是增加函數的功能。比如首先定義一個輸出當前時間的函數,再定義一個規定時間格式的函數,把后一個函數作用在前一個函數上,就是一個裝飾器,作用是用特定格式輸出當前時間。
>Numba的優勢
1.簡單,往往只要1行代碼就有驚喜;
2.對循環(loop)有奇效,而往往在科學計算中限制python速度的就是loop;
3.兼容常用的科學計算包,如numpy、cmath等;
4.可以創建ufunc;
5.會自動調整精度,保證準確性。
如何使用numba
針對上面提到的numba的優勢,我來進行逐一介紹。首先導入numba
import numba as nb
只用1行代碼即可加速,對loop有奇效
因為numba內置的函數本身是個裝飾器,所以只要在自己定義好的函數前面加個@nb.jit()就行,簡單上手。下面以一個求和函數為例
# 用numba加速的求和函數@nb.jit()def nb_sum(a): Sum = 0 for i in range(len(a)): Sum += a[i] return Sum# 沒用numba加速的求和函數def py_sum(a): Sum = 0 for i in range(len(a)): Sum += a[i] return Sum
來測試一下速度
import numpy as np a = np.linspace(0,100,100) # 創建一個長度為100的數組 %timeit np.sum(a) # numpy自帶的求和函數 %timeit sum(a) # python自帶的求和函數 %timeit nb_sum(a) # numba加速的求和函數 %timeit py_sum(a) # 沒加速的求和函數
更多Python相關技術文章,請訪問Python教程欄目進行學習!
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com