Salut ! :) J'aimerais savoir comment obtenir avec une matrice quelconque sur python, une matrice diagonale avec que des 1 en diagonale.
J'ai cette matrice par exemple:
Code:
1
2
3
4 [[ 1. 1. 2. ] [ 0. -2. -3. ] [ 0. 0. 0.5 ]]
Version imprimable
Salut ! :) J'aimerais savoir comment obtenir avec une matrice quelconque sur python, une matrice diagonale avec que des 1 en diagonale.
J'ai cette matrice par exemple:
Code:
1
2
3
4 [[ 1. 1. 2. ] [ 0. -2. -3. ] [ 0. 0. 0.5 ]]
Salut,
Il faut utiliser des packages scientifiques comme scipy ou seulement numpy. Pour les opérations simples comme diagonaliser une matrice, vous avez des fonctions genre numpy.diag.
note: si c'est juste pour replacer par des 1 les cases d'indices (i, j) avec i = j et les autres par des zéros, voir les tutos. pour apprendre listes et boucles for.
- W
C'était bien quelque chose du type numpy.diag que je cherchais merci !
Euh, la fonction numpy.diag ne diagonalise pas ! Elle permet simplement d'extraire une diagonale de la matrice, ou de creer une matrice diagonale a partir d'un vecteur.
https://docs.scipy.org/doc/numpy/ref...umpy.diag.html
C'est hors sujet par rapport a la question, mais du coup je réponds au titre du topic.
Pour diagonaliser une matrice, vous pouvez utiliser le module numpy.linalg
import numpy as np
A = np.matrix([[1,2,3],[4,5,6],[7,8,1]])
D, P = np.linalg.eig(A)
np.diag(D) est la matrice A diagonalisée
P est la matrice de passage.
On peut vérifier que :
A = P * D * P-1
A - P.dot(np.diag(D)).dot(np.linalg.inv(P)) est egal a 0 (aux erreurs numériques pres !)
Le problème est dans le titre de la discussion : "Diagonalisation de matrice"
La diagonalisation, c'est ca : https://fr.wikipedia.org/wiki/Diagonalisation
Une recherche google "diagonaliser matrice python" amène directement sur cette page, alors que ce n'est pas la question posée, et qu'elle n'y répondait pas.
C'est donc pour ca que je dis juste après :Libre a vous de renommer le titre du topic et de supprimer les réponses hors sujet.Citation:
C'est hors sujet par rapport a la question, mais du coup je réponds au titre du topic.