#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)])
kernel
[[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]]
matrix[0][0:10]
[0.6394267984578837, 0.025010755222666936, 0.27502931836911926, 0.22321073814882275, 0.7364712141640124, 0.6766994874229113, 0.8921795677048454, 0.08693883262941615, 0.4219218196852704, 0.029797219438070344]
#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)
resMatrix[0][0:10]
[42.65049558379882, 53.999948655026984, 56.22220198391156, 55.3831550982956, 60.48071272688835, 52.65145871052587, 43.085424850871185, 46.6772598394238, 47.53890199829784, 47.17540954128931]
#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