56 lines
1.8 KiB
Python
Executable File
56 lines
1.8 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
|
|
class Question:
|
|
def __init__(self,i=1, l=0, n=''):
|
|
self.name=n
|
|
self.level=l
|
|
self.number=i
|
|
def __enter__(self):
|
|
print('\n' + (self.level*2)*' ' + f"-> {self.number}. : {self.name} -- Début")
|
|
return self
|
|
def __exit__(self, exc_type, exc_value, exc_traceback):
|
|
print((self.level*2)*' ' + f"<- {self.number}. : {self.name} -- Fin\n")
|
|
|
|
import numpy as np
|
|
import random
|
|
with Question(3):
|
|
A = np.reshape(np.array([random.randint(0,9) for _ in range(9*9)]), (9,9))
|
|
B = np.reshape(np.array([random.randint(0,9) for _ in range(2*2)]), (2,2))
|
|
print(A)
|
|
print(B)
|
|
def motif(B, A):
|
|
for i in range(A.shape[0] - B.shape[0] + 1):
|
|
for j in range(A.shape[1] - B.shape[1] + 1):
|
|
diff = False
|
|
for k in range(B.shape[0]):
|
|
for l in range(B.shape[1]):
|
|
if B[k][l]!=A[i+k][j+l]:
|
|
diff = True
|
|
break
|
|
if diff:
|
|
break
|
|
if not diff:
|
|
return True
|
|
return False
|
|
print(motif(B, A))
|
|
|
|
def S(A, B):
|
|
s = 0
|
|
for i in range(A.shape[0]):
|
|
for j in range(A.shape[1]):
|
|
s += (A[i][j] - B[i][j])**2
|
|
return s
|
|
|
|
def proche_motif(B, A):
|
|
M = np.zeros((A.shape[0] - B.shape[0] + 1, A.shape[1] - B.shape[1] + 1))
|
|
mini = (0,0)
|
|
for i in range(A.shape[0] - B.shape[0] + 1):
|
|
for j in range(A.shape[1] - B.shape[1] + 1):
|
|
M[i][j] = S(B, A[i: i +B.shape[0], j: j + B.shape[1]])
|
|
if M[mini[0]][mini[1]] > M[i][j]:
|
|
mini = (i,j)
|
|
return A[mini[0]: mini[0] +B.shape[0], mini[1]: mini[1] + B.shape[1]]
|
|
print(proche_motif(B,A))
|
|
|