#!/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))