Écrire matrice identite(n) par compréhension
Exercice d'entraînement · niveau 3 (difficile) · NSI (première), chapitre 4 — Les types construits · Matrices
Énoncé
Écrire matrice_identite(n) par compréhension. Vérifier sur matrices aléatoires qu'elle est neutre pour le produit, des deux côtés. Pourquoi faut-il tester les deux côtés ?
Corrigé
def matrice_identite(n):
"""Matrice identite de taille n x n. Precondition : n >= 1."""
assert n >= 1
return [[1 if i == j else 0 for j in range(n)] for i in range(n)]
L'expression 1 if i == j else 0 est une conditionnelle écrite comme une valeur : elle rend sur la diagonale, ailleurs. On aurait pu écrire une double boucle avec append, mais la compréhension dit ici exactement la définition — « la case vaut si ».
Vérification.
assert matrice_identite(1) == [[1]]
assert matrice_identite(3) == [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
for _ in range(200):
n, p = random.randint(1, 5), random.randint(1, 5)
a = [[random.randint(-9, 9) for _ in range(p)] for _ in range(n)]
assert produit_matrices(matrice_identite(n), a) == a # I_n x A = A
assert produit_matrices(a, matrice_identite(p)) == a # A x I_p = A
Les matrices passent, des deux côtés.
Pourquoi les deux côtés. Pour deux raisons de nature très différente.
- Mathématique : le produit de matrices n'est pas commutatif. Être neutre à gauche n'entraîne pas d'être neutre à droite — la propriété doit être vérifiée dans les deux sens, et ce ne sont pas les mêmes identités : à gauche, à droite, de tailles différentes pour une matrice rectangulaire.
- De mise au point : les deux tests n'exercent pas le même code.
produit_matrices(I, a)parcourt la diagonale par l'indicei,produit_matrices(a, I)par l'indicej. Une inversion des indices dans la boucle interne passerait le premier test et échouerait au second.
Sur une matrice carrée, une inversion d'indices ne provoque aucune erreur — c'est l'avertissement du cours. C'est pourquoi les tests emploient ici des matrices rectangulaires tirées au hasard, avec et indépendants.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.