python加速器numba使用詳解
python的一個加速器包,這里不講原理,只講應(yīng)用過程,以及給出幾個小例子,直接寫就行了; 另外還給出了numba如何定義使用List
1、最簡單的使用
當(dāng)輸出返回值為整數(shù)或浮點數(shù)時:
from numba import jit @jit(nopython=True) def f(x, y): ? ? return x+y if __name__ == '__main__': ? ? a = 1 ? ? b = 1 ? ? print(f(a,b))
解釋:
使用裝飾器,另外,nopython=True是防止numba自動更改加速模式,也就是使用nopython。
上述代碼等價于:
from numba import njit @njit ?# 也就是jit(nopython=True) def f(x, y): ? ? return x+y if __name__ == '__main__': ? ? a = 1 ? ? b = 1 ? ? print(f(a,b))
2、進階
當(dāng)輸出返回值為“不同類型值”時:
裝飾器使用:generated_jit
from numba import generated_jit, typed @generated_jit(nopython=True) def f2(x): ? ? if x==1: ? ? ? ? return lambda x: x+1 ? ? else: ? ? ? ? return lambda x: [1,2] if __name__ == '__main__': ? ? a = 1 ? ? print(f2(a))
當(dāng)進行矩陣或向量運算時:
使用裝飾器:vectorize
from numba import vectorize, float64 import numpy as np @vectorize([float64(float64, float64)]) ?# 注意有中括號 def f(x, y): ? ? return x + y if __name__ == '__main__': ? ? a = np.array([1,2]) ? ? b = np.array([2,2]) ? ? print(f(a,b))
補充
在numba內(nèi)定義列表:
import numpy as np import time NUM = 160 from numba import jit from numba.typed import List a = List() a.append(1) # 同樣需要指定數(shù)據(jù)類型,塞個1,數(shù)據(jù)類型就是int @jit(nopython=True) def f(a): ? ? for i in range(NUM): ? ? ? ? a.append(i) if __name__ == '__main__': ? ?for i in range(5): ? ? start = time.time() ? ? f(a) ? ? print(time.time()-start)
到此這篇關(guān)于python加速器numba使用詳解的文章就介紹到這了,更多相關(guān)python加速器numba內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談Python生成器generator之next和send的運行流程(詳解)
下面小編就為大家?guī)硪黄獪\談Python生成器generator之next和send的運行流程(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
Python使用Flask-SQLAlchemy連接數(shù)據(jù)庫操作示例
這篇文章主要介紹了Python使用Flask-SQLAlchemy連接數(shù)據(jù)庫操作,簡單介紹了flask、Mysql-Python以及Flask-SQLAlchemy的安裝方法,并結(jié)合實例形式分析了基于Flask-SQLAlchemy的數(shù)據(jù)庫連接相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
NCCL深度學(xué)習(xí)Bootstrap網(wǎng)絡(luò)連接建立源碼解析
這篇文章主要為大家介紹了NCCL深度學(xué)習(xí)Bootstrap網(wǎng)絡(luò)連接建立源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04

