無代碼開發(fā)平臺(國內(nèi)無代碼開發(fā)平臺推薦)">國內(nèi)無代碼開發(fā)平臺(國內(nèi)無代碼開發(fā)平臺推薦)
1309
2022-05-30
當(dāng)代碼中有很多math計(jì)算,使用numpy或者有很多l(xiāng)oops時(shí),numba可以加速代碼
最基礎(chǔ)的是numba jit修飾器@jit
from numba import jit import numpy as np x = np.arange(100).reshape(10, 10) @jit(noPython=True) # Set "nopython" mode for best performance, equivalent to @njit def go_fast(a): # Function is compiled to machine code when called the first time,第一次運(yùn)行會被編譯成機(jī)器碼 trace = 0.0 for i in range(a.shape[0]): # Numba likes loops trace += np.tanh(a[i, i]) # Numba likes NumPy functions return a + trace # Numba likes NumPy broadcasting print(go_fast(x))
@jit以兩種編譯模式進(jìn)行,nopython編譯模型實(shí)質(zhì)上是編譯經(jīng)過修飾的函數(shù),使得函數(shù)可以直接運(yùn)行而不需要python解釋器(在命令行下運(yùn)行python就是啟動cython解釋器,cython是使用最廣的python解釋器)的參與。
numba讀取裝飾函數(shù)的python字節(jié)碼,并結(jié)合輸入?yún)?shù)類型,使用LLVM編譯器生成針對cpu功能量身定制的機(jī)器代碼版本,然后每次調(diào)用函數(shù)會使用編譯版本
numba也可以實(shí)現(xiàn)CUDA編程,可以使用純python編寫的內(nèi)核,并讓numba處理計(jì)算和數(shù)據(jù)移動
loop
在IEEE 754合規(guī)性不太重要時(shí),可以放寬數(shù)字上的嚴(yán)謹(jǐn)性,來獲得額外的性能,實(shí)現(xiàn)方式為 fastmath=True
如果代碼包含可并行化操作,numba可以編譯多線程版本,實(shí)現(xiàn)方式為parallel=True
按元素或按點(diǎn)數(shù)組操作
一元運(yùn)算符: + - ~
二進(jìn)制運(yùn)算符: + - * / % | >> << ^ & // **
比較運(yùn)算符:== != < > <= >=
在nopython模式下支持Numpy ufuncs
用戶DUFunc通過定義vectorize()
numpy的規(guī)約函數(shù)sum prod min max argmin argmax
numpy dot
維度相同時(shí),多維數(shù)組也支持以上操作,不支持混合維度數(shù)組進(jìn)行numpy廣播,也不支持選定維度上進(jìn)行規(guī)約
語言
支持的結(jié)構(gòu)
if ... elif ... else ...
while for .. in break continue
yield
assert
部分受支持的結(jié)構(gòu)
try .. except raise else finally
上下文管理器
列表理解
不支持的構(gòu)造
異步
類定義
集合,字典,生成器理解
發(fā)電機(jī)委托 yield from
內(nèi)置類型
元祖
列表
字典等
標(biāo)量類型
整數(shù)
布爾
實(shí)數(shù)復(fù)數(shù)等
數(shù)組類型
陣列存取
屬性
shape size ndim dtype等
計(jì)算
all() any() argmax() argmin() mean() min()等
其他方法
argsort()
astype() (僅一個(gè)參數(shù)形式)
copy() (無參數(shù))
dot() (僅一個(gè)參數(shù))等
基本線性代數(shù)
在浮點(diǎn)數(shù)和復(fù)數(shù)的一維和二維連續(xù)數(shù)組上支持
其他功能
numpy.append()
numpy.arange()
numpy.ones() 等
參考文檔:https://numba.readthedocs.io/en/stable/reference/numpysupported.html
Numpy Python
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。