說現在最流行的語言,就不得不提python。但python雖然容易上手,但速度卻有點感人。如何用簡單的方法讓python加速到近乎可以媲美C的速度呢?
今天來就來談談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教學欄位進行學習!
以上是python如何提高運行速度的詳細內容。更多資訊請關注PHP中文網其他相關文章!