Explication de code Python : matrice de pivot

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

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 !

+0 -0

Cette réponse a aidé l’auteur du sujet

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.

Édité par entwanne

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.

I don’t mind that you think slowly, but I do mind that you are publishing faster. — W. Pauli

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

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