Explication de code Python : matrice de pivot

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J’ai besoin de calculer le pivot d’une matrice. J’ai donc trouvé un exemple que j’ai un peu adapté. Ça fonctionne comme attendu mais je ne le comprend pas entièrement. Voici la fonction que j’utilise :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
def compute_pivot(A):
    n = len(A)
    pivot = [[int(i == j) for j in range(n)] for i in range(n)]  # Create a diagonal matrix with the A size

    for i in range(n):
        row = max(range(i, n), key=lambda j: abs(A[j][i]))
        if i != row:
            pivot[i], pivot[row] = pivot[row], pivot[i]

    return pivot

C’est, comme vous aurez pu vous en douter je pense, à partir du for que je suis perdu. Si j’ai bien compris, row contient la valeur la plus élevée de la ligne en valeur absolue ? Et si i est différent de row, on échange les lignes ? Je ne comprend pas la logique derrière… Est-ce que quelqu’un peut me l’expliquer ?

Merci de votre aide !

Bonjour,

row contient l’indice de la ligne (à partir de l’indice courant i) ayant la plus grande valeur (absolue) en colonne i.

Si effectivement cette ligne n’est pas la ligne courante, les deux lignes sont inversées dans la matrice pivot.

Salut,

En général on ne calcule pas des matrices pivot pour le plaisir, du coup je me demande quel est le vrai problème que tu souhaites résoudre ? Il y a des chances pour que numpy fasse le boulot de manière plus fiable et rapide que n’importe quel code Python.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte