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-2744436/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Numba是什麼?Numba如何使用呢?
- numba-vectorize
- numba-jitclass
- Ubuntu 18.04 LTS安裝numbaUbuntu
- Numba編譯器的介紹與應用編譯
- 關於Numba的執行緒實現的說明執行緒
- Python資料預處理:Dask和Numba並行化加速!Python並行
- Python中的numba的基本應用!讓你的Python快一萬倍!Python
- 高效能運算&CUDA | 使用numba對三維矩陣在gpu上進行運算矩陣GPU
- jQuery是什麼?如何使用?jQuery
- VPS是什麼?如何使用
- 什麼是ping如何使用它
- 什麼是 Opcache,如何使用 Opcacheopcache
- 利用 Numba 加速你的 Python 程式碼,使其變得像 C++ 一樣快PythonC++
- Linux管道命令是什麼?如何使用?Linux
- VNC,什麼是VNC,如何使用VNC?VNC
- Boot Camp是什麼以及如何使用boot
- Python 集合是什麼,為什麼應該使用以及如何使用?Python
- MQTT 保留訊息是什麼?如何使用?MQQT
- Python魔法方法是什麼?如何使用?Python
- 什麼是Python?如何安裝使用Python?Python
- c++中 -> 是什麼意思,如何使用C++
- Python中eval函式是什麼?如何使用?Python函式
- 什麼是Docker?為什麼使用docker?Docker
- 德爾菲技術是什麼意思?如何使用?
- Linux系統中rm是什麼意思?如何使用?Linux
- Linux命令列提示符是什麼?如何使用?Linux命令列
- Linux grep命令如何使用?語法格式是什麼?Linux
- Linux裡面歸檔命令是什麼?如何使用?Linux
- 【譯】什麼是JavaScript generator 以及如何使用它們JavaScript
- TypeScript是什麼,為什麼要使用它?TypeScript
- 什麼是HSTS,為什麼要使用它?
- 什麼是Nginx?Linux為什麼使用Nginx?NginxLinux
- 什麼是介面,如何理解
- Python中/與//的區別是什麼?其如何使用?Python
- 在Linux中,什麼是SSH,並且如何使用它?Linux
- 在Linux中,什麼是管道操作,以及如何使用它?Linux
- Linux中useradd命令如何使用?常用引數是什麼?Linux