Я сделал кое-что быстрое, надеюсь, это поможет вам начать:
import time
import numpy as np
from numba import jit
def numba_off(offset, width, height, kernel):
for x in range(offset, width - offset):
for y in range(offset, height - offset):
acc = [0, 0, 0]
for a in range(len(kernel)):
for b in range(len(kernel)):
pixel = [1, 1, 1]
acc[0] += pixel[0] * kernel[a][b]
acc[1] += pixel[1] * kernel[a][b]
acc[2] += pixel[2] * kernel[a][b]
@jit(nopython=True)
def numba_on(offset, width, height, kernel):
for x in range(offset, width - offset):
for y in range(offset, height - offset):
acc = [0, 0, 0]
for a in range(len(kernel)):
for b in range(len(kernel)):
pixel = [1, 1, 1]
acc[0] += pixel[0] * kernel[a][b]
acc[1] += pixel[1] * kernel[a][b]
acc[2] += pixel[2] * kernel[a][b]
box_kernel = np.array([[1 / 9, 1 / 9, 1 / 9], [1 / 9, 1 / 9, 1 / 9], [1 / 9, 1 / 9, 1 / 9]])
kernel = box_kernel
offset = len(kernel) // 2
start = time.time()
numba_off(offset, 1000, 1000, kernel)
end = time.time()
print("Elapsed (without) = %s" % (end - start))
start = time.time()
numba_on(offset, 1000, 1000, kernel)
end = time.time()
print("Elapsed (with compilation) = %s" % (end - start))
start = time.time()
numba_on(offset, 1000, 1000, kernel)
end = time.time()
print("Elapsed (after compilation) = %s" % (end - start))
Вы должны быть в состоянии развить это. И вам будет полезно прочитать что-то вроде этого: 5-минутный путеводитель по нумбе