1、下面直接上代码需要注意的地方numba的官网找到
1)有一些坑自己去numba的官网找找看,下面是我的写的一个加速的程序,希望对你有帮助。
#coding:utf-8
import time from numba import jit, prange, vectorize
from numba import cuda
from numba import njit
import numpy as np def adds(x,y,m):
return [x*i for i in range(y)] @jit(parallel=True,nogil=True)
# @njit(parallel=True,nogil=True)
def adds1(x,y,m):
sd = np.empty((y))
for i in prange(y):
for j in range(m):
sd[i]=x*i*m
return sd @jit(parallel=True,nogil=True)
def test(n):
temp = np.empty((50, 50)) # <--- allocation is hoisted as a loop invariant as `np.empty` is considered pure
for i in prange(n):
temp[:] = 0 # <--- this remains as assignment is a side effect
for j in range(50):
temp[j, j] = i
return temp if __name__=="__main__":
n = 50
max = 10000**2*12
m=100
# st1 = time.time()
# val_1 = adds(n,max,m)
# print(time.time()-st1) st2 = time.time()
val_2 = adds1(n,max,m)
print(time.time()-st2) st3 = time.time()
tmp = test(100**3*10)
print(time.time()-st3)
2) 最后一个显示时间输入,
如果不调用jit装饰器的话这两个程序在我的电脑直接跑不下来。调用过后,Python可以做并行计算,开启多线程,忽略gil动态锁。