Numba加速python代碼

      網(wǎng)友投稿 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

      Numba:加速python代碼

      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)容。

      上一篇:云脈:用SaaS迎接人工智能識別應(yīng)用的爆發(fā)
      下一篇:TMS320C6678開發(fā)例程使用手冊(1)
      相關(guān)文章
      亚洲精品无码久久久久秋霞 | 精品亚洲一区二区| 色偷偷女男人的天堂亚洲网 | 亚洲精品无码av天堂| 久久亚洲精品高潮综合色a片| ass亚洲**毛茸茸pics| 亚洲一级毛片视频| 亚洲国产成人99精品激情在线| 亚洲一区二区三区不卡在线播放 | 亚洲第一永久在线观看| 亚洲欧洲高清有无| 亚洲91精品麻豆国产系列在线| 亚洲视频小说图片| 亚洲专区中文字幕| jiz zz在亚洲| 风间由美在线亚洲一区| 国产亚洲男人的天堂在线观看| 亚洲国产欧美国产综合一区 | 亚洲阿v天堂在线2017免费| 亚洲精品色婷婷在线影院| 中文字幕精品亚洲无线码一区应用| 奇米影视亚洲春色| 亚洲Av无码精品色午夜| 中文字幕亚洲免费无线观看日本 | 亚洲性色高清完整版在线观看| 亚洲中文字幕人成乱码| 亚洲欧美aⅴ在线资源| 亚洲av再在线观看| 亚洲一区二区三区无码中文字幕| 国产亚洲精品福利在线无卡一| 精品亚洲综合久久中文字幕| 337p日本欧洲亚洲大胆艺术| 亚洲二区在线视频| 久久综合亚洲色hezyo| 亚洲一区二区三区国产精品| 亚洲日韩激情无码一区| 久久精品国产亚洲AV大全| 亚洲w码欧洲s码免费| 99亚洲精品卡2卡三卡4卡2卡| 亚洲综合最新无码专区| 亚洲av色影在线|