Numba是什麼?Numba如何使用呢?
Numba,一款可以讓Python函式編譯為機器程式碼的JIT編譯器,它可以加速Python執行,想必很多人對它都十分感興趣,接下來我們就來看看吧。
Numba是什麼?
Numba是一個庫,可以在執行時將Python程式碼編譯為本地機器指令,而不會強制大幅度的改變普通的Python程式碼(稍後再做說明)。翻譯/魔術是使用LLVM編譯器完成的,該編譯器是相當活躍的開源社群開發的。
Numba最初是由Continuum Analytics內部開發,此公司也開發了著名的Anaconda,但現在它是開源的。核心應用領域是math-heavy(密集數學?重型數學?)和array-oriented(面向陣列)的功能,它們在本地Python中相當緩慢。想象一下,在Python中編寫一個模組,必須一個元素接著一個元素的迴圈遍歷一個非常大的陣列來執行一些計算,而不能使用向量操作來重寫。這是很不好的主意,是吧?所以“通常”這類庫函式是用C / C ++或Fortran編寫的,編譯後,在Python中作為外部庫使用。Numba這類函式也可以寫在普通的Python模組中,而且執行速度的差別正在逐漸縮小。
如何使用Numba呢?
使用它的要求不多。基本上,你寫一個自己的“普通”的Python函式,然後給函式定義新增一個裝飾(如果你不是很熟悉裝飾器,讀一下關於this或that)。你可以使用不同型別的裝飾器,但@jit可能是剛開始的選擇之一。其他裝飾器可用於例如建立numpy通用功能@vectorize或編寫將在CUDA GPU上執行的程式碼@cuda。在本文中暫時不介紹這些裝飾。現在,讓我們來看看基本的步驟。他們提供的程式碼示例是2d陣列的求和函式,以下是程式碼:
from numba import jit
from numpy import arange
# jit decorator tells Numba to compile this function.# The argument types will be inferred by Numba when function is called.
@jit
def sum2d(arr):
M, N = arr.shape
result = 0.0
for i in range(M):
for j in range(N):
result += arr[i,j]
return result
a = arange(9).reshape(3,3)
print(sum2d(a))
正如你所看到的,Numba裝飾器被新增到函式定義中,並且voilá這個函式將執行得很快。但是,這裡帶來了很有趣的注意事項:你只能使用Numpy和標準庫裡的函式來加快Numba速度,甚至不需要開了他們所有的特性。他們有一個相當好的文件(參考資料),列出了所有支援的內容。見here是所支援Python的功能和here 是所支援的Numpy功能。現在支援的功能可能還不太多,但我想告訴你,這就夠了!請記住,Numba不是要加快你的資料庫查詢或如何強化影像處理功能。他們的目標是加快面向陣列的計算,我們可以使用它們庫中提供的函式來解決。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952527/viewspace-2759616/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Numba是什麼?Numba如何使用?
- numba-vectorize
- numba-jitclass
- Ubuntu 18.04 LTS安裝numbaUbuntu
- Numba編譯器的介紹與應用編譯
- 什麼是SOCKS5代理?如何使用呢?
- 關於Numba的執行緒實現的說明執行緒
- Python資料預處理:Dask和Numba並行化加速!Python並行
- CDN是什麼呢
- Python中的numba的基本應用!讓你的Python快一萬倍!Python
- 使用A3報告的流程是什麼呢?
- 高效能運算&CUDA | 使用numba對三維矩陣在gpu上進行運算矩陣GPU
- jQuery是什麼?如何使用?jQuery
- VPS是什麼?如何使用
- 這是什麼東西呢?
- Java到底是什麼呢Java
- 代理埠是什麼意思呢?
- CN2是什麼呢
- 【MySQL】究竟什麼是MVCC呢?MySqlMVC
- JVM ZeroTLAB 是什麼意思呢?JVM
- 那麼弱口令是什麼意思呢?
- 什麼是爬蟲?爬蟲的工作原理是什麼呢爬蟲
- 什麼是ping如何使用它
- 什麼是 Opcache,如何使用 Opcacheopcache
- 利用 Numba 加速你的 Python 程式碼,使其變得像 C++ 一樣快PythonC++
- 什麼是垃圾蒐集(GC)?為什麼要有GC呢?GC
- Linux管道命令是什麼?如何使用?Linux
- VNC,什麼是VNC,如何使用VNC?VNC
- Boot Camp是什麼以及如何使用boot
- Python為什麼會這麼火呢?原因是什麼?Python
- 什麼是web2py框架?它有什麼作用呢?Web框架
- 究竟什麼是專案管理?它的主要內容是什麼呢?專案管理
- 企業資料整合是什麼呢?
- python爬蟲步驟是什麼呢?Python爬蟲
- 到底什麼是企業簽名呢?
- Python add()函式是如何使用呢?Python函式
- Python 集合是什麼,為什麼應該使用以及如何使用?Python
- 你知道什麼是偽靜態嗎?它有什麼作用?如何實現偽靜態呢?