日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

python加速器numba使用詳解_python

作者:_劉文凱_ ? 更新時間: 2023-04-01 編程語言

python的一個加速器包,這里不講原理,只講應用過程,以及給出幾個小例子,直接寫就行了; 另外還給出了numba如何定義使用List

1、最簡單的使用

當輸出返回值為整數或浮點數時:

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、進階

當輸出返回值為“不同類型值”時:

裝飾器使用: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))

當進行矩陣或向量運算時:

使用裝飾器: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內定義列表:

import numpy as np
import time
NUM = 160
from numba import jit
from numba.typed import List

a = List()
a.append(1) # 同樣需要指定數據類型,塞個1,數據類型就是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)

原文鏈接:https://blog.csdn.net/qq_24211837/article/details/124520545

欄目分類
最近更新