chercher une sous-matrice¶
On vous demande d’écrire une fonction npsearch
qui accepte accepte en entrée deux paramètres
une matrice
world(un tableau numpy de dimension 2)un tableau
needleà chercher dans la matrice;needlepeut être de dimension 1 ou 2
npsearchest un générateur (i.e. une fonction génératrice), il doit énumérer tous les tuples d’indices(i, j)correspondant aux endroits deworldqui coincident avecneedle
import numpy as np
# c'est ce qu'on voit sur cet exemple
from corrections.exo_npsearch import exo_npsearch
exo_npsearch.example()# à vous de jouer
# n'oubliez pas de déclarer les paramètres de votre fonction
def npsearch(world, needle):
# souvenez-vous aussi que vous devez définir un générateur
yield 0exo_npsearch.correction(npsearch)Indices¶
je vous invite autant que possible, comme toujours avec
numpy:à éviter les boucles faites à la main
et à préférer des méthodes toutes faites pour faire des recherches
essayez par exemple
de définir une condition nécessaire sur
world[i, j]lorsque(i, j)fait partie des solutionset c’est peut-être l’occasion de jeter un coup d’oeil à
numpy.argwhere
méfiez-vous aussi des expressions du genre
tableau_a == tableau_ben ce sens que, si les deux tailles ne coincident pas,numpyva essayer de faire du broadcasting pour réconcilier les deux tailles, et ici clairement, ce n’est pas ce qu’on veut...
# enfin pour transformer une ligne en tableau 2D on a le choix entre
a = np.array([1, 2, 3])# version un peu poussive
n, = a.shape; a.reshape((1, n))array([[1, 2, 3]])# version plus concise
a[np.newaxis, :]array([[1, 2, 3]])