sqlserver循环like变量_numba从入门到精通(6)—numba与循环与并行
生活随笔
收集整理的這篇文章主要介紹了
sqlserver循环like变量_numba从入门到精通(6)—numba与循环与并行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
多進程、多線程、并行的調用方式的不同以及python各種常用且優化較好的并行的處理方法,回頭要總結一下,概念模糊很蒙蔽。我們這里介紹一下numba強大并且簡單易用的并行功能。
import numpy from numba import njit def do_trig(x, y):z = numpy.empty_like(x)for i in range(x.shape[0]):for j in range(x.shape[1]):z[i, j] = numpy.sin(x[i, j]**2) + numpy.cos(y[i, j])return zx = numpy.random.random((1000, 1000)) y = numpy.random.random((1000, 1000))%timeit do_trig(x, y)下面我們jit一下
@njit def do_trig(x, y):z = numpy.empty_like(x)for i in range(x.shape[0]):for j in range(x.shape[1]):z[i, j] = numpy.sin(x[i, j]**2) + numpy.cos(y[i, j])return zvery nice,改變編譯的方式特別是在這種大量循環的情況下能提升非常多速度呢。
接下來我們使用numba中的并行功能來并行化循環。
import numba from numba import njit,prange numba.config.NUMBA_DEFAULT_NUM_THREADS=4 @njit(parallel=True) def do_trig(x, y):z = numpy.empty_like(x)for i in prange(x.shape[0]):for j in prange(x.shape[1]):z[i, j] = numpy.sin(x[i, j]**2) + numpy.cos(y[i, j])return z%timeit do_trig(x, y)需要注意的是,numba并行的時候使用的線程數通過numba的環境變量來設置,應該針對不同的任務設置大小,并不是越大越好因為調用多個線程也是存在開銷的,另外原來的range循環要用numba特有的prange替換,這樣numba才能識別循環并且進行相應的并行化。
我們前面提到的vectorize并行化就更簡單了。。。可以把直接把矩陣運算進行并行。。。見下:
@vectorize def do_trig_vec(x, y):z = math.sin(x**2) + math.cos(y)return z%timeit do_trig_vec(x, y)@vectorize('float64(float64, float64)', target='parallel') def do_trig_vec_par(x, y):z = math.sin(x**2) + math.cos(y)return z%timeit do_trig_vec_par(x, y)numba在vectorize修飾函數的情況下,可以直接對矩陣運算進行并行,牛逼,太方便了哈哈哈哈哈哈哈哈,而且用起來真是太簡單了。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的sqlserver循环like变量_numba从入门到精通(6)—numba与循环与并行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 李书福的锅?魅族副总裁:魅族20原本这个
- 下一篇: 直接在器官上3D打印!新型柔性软体机器人