Pour cette question, vous devez implémenter deux fonctions Python qui permettent d’extraire des informations stockées dans une matrice (liste de liste) M. Cette matrice est carrée, de dimension plus grande que 1, et contient des nombres décimaux ; par exemple
La première fonction moyenne_diag(M)
doit simplement renvoyer une liste à deux éléments contenant la
moyenne des deux diagonales principales de la matrice. Dans notre exemple ci-dessus, elle renvoie la liste
[d1, d2]
avec
\(d1 = (1.2 + 5.1 + 1.5 + 1.9 + 4.9 + 2.0)/6 = 16.6/6 = 2.77\)
\(d2 = (8.9 + 6.3 + 6.8 + 5.3 + 3.3 + 0.9)/6 = 31.5/6 = 5.25\)
La deuxième fonction maxima(M)
doit renvoyer une liste des coordonnées des éléments de la matrice qui sont
des maxima locaux. Dans notre contexte, nous dirons qu’un élément x est un maximum local lorsque tous ses 8
voisins (aussi bien horizontaux, verticaux que diagonaux) sont strictement plus petits que lui, tout en se trouvant
à l’intérieur de la matrice (on considère qu'un maximum local ne peut pas se trouver sur les « bords » d'une matrice,
et compte donc nécessairement 8 voisins). Pour faciliter votre travail, n’hésitez pas à définir une fonction Python
intermédiaire qui, par exemple, évalue si un élément précis de M est un maximum local, et ensuite utiliser cette
fonction dans maxima.
Dans notre exemple:
- Les maxima locaux sont indiqués en gras.
- Les éléments de valeur 8.9 et 4.7 ne sont, par exemple, pas des maxima locaux car ils se trouvent au « bord » de la matrice.
- Les trois maxima se situent en (ligne 1, colonne 1), (ligne 2, colonne 3), (ligne 4, colonne 4) car les indices commencent à 0.
- La fonction maxima renvoie ces coordonnées (ligne, colonne) dans une liste, [[1,1], [2,3], [4,4]].