In [1]:
#inicializace matice a kernelu (seznam seznamu muzete pripadne necim nahradit)
import random
random.seed(42)

width = 1000
height = 1000
kernel_width = 5
kernel_height = 5

matrix = []
kernel = []

for i in range(width):
    row = []
    for j in range(height):
        row.append(random.random())
    matrix.append(row)

for i in range(kernel_width):
    kernel.append([i+j for j in range(kernel_height)])
In [2]:
kernel
Out[2]:
[[0, 1, 2, 3, 4],
 [1, 2, 3, 4, 5],
 [2, 3, 4, 5, 6],
 [3, 4, 5, 6, 7],
 [4, 5, 6, 7, 8]]
In [3]:
matrix[0][0:10]
Out[3]:
[0.6394267984578837,
 0.025010755222666936,
 0.27502931836911926,
 0.22321073814882275,
 0.7364712141640124,
 0.6766994874229113,
 0.8921795677048454,
 0.08693883262941615,
 0.4219218196852704,
 0.029797219438070344]
In [4]:
#algoritmus (konvoluce pomoci kernelu)
resMatrix = []
for i in range(width-kernel_width):
    resRow = []
    for j in range(height-kernel_height):
        resVal = 0
        for k in range(kernel_width):
            for m in range(kernel_height):
                resVal = resVal + matrix[i+k][j+m]*kernel[k][m]
        resRow.append(resVal)
    resMatrix.append(resRow)            
In [5]:
resMatrix[0][0:10]
Out[5]:
[42.65049558379882,
 53.999948655026984,
 56.22220198391156,
 55.3831550982956,
 60.48071272688835,
 52.65145871052587,
 43.085424850871185,
 46.6772598394238,
 47.53890199829784,
 47.17540954128931]
In [6]:
#mereni casove narocnosti provadenych operaci (10x opakovany vypocet)
import timeit
setup = """
import random
random.seed(42)

width = 1000
height = 1000
kernel_width = 5
kernel_height = 5

matrix = []
kernel = []

for i in range(width):
    row = []
    for j in range(height):
        row.append(random.random())
    matrix.append(row)

for i in range(kernel_width):
    kernel.append([i+j for j in range(kernel_height)])
"""

code_to_test_list = """
resMatrix = []
for i in range(width-kernel_width):
    resRow = []
    for j in range(height-kernel_height):
        resVal = 0
        for k in range(kernel_width):
            for m in range(kernel_height):
                resVal = resVal + matrix[i+k][j+m]*kernel[k][m]
        resRow.append(resVal)
    resMatrix.append(resRow)  
"""

print(timeit.timeit(setup = setup,stmt = code_to_test_list, number = 10)) 
58.204173
In [ ]: