La funzione diag di python
Per estrarre la diagonale principale e secondaria di una matrice, nel linguaggio python uso le funzione diag() e e fliplr() del modulo numpy.
Diagonale principale
numpy.diag(m)
Diagonale secondaria (antidiagonale)
numpy.diag(fliplr(m))
In entrambi i casi l'argomento in input è un oggetto di tipo array.
La funzione diag() mi restituisce il vettore degli elementi nella diagonale principale o secondaria della matrice.
Nota. Nel caso della diagonale secondaria, la funzione fliplr() ribalta la matrice da sinistra a destra. Questo escamotage mi permette di trovare anche l'antidiagonale della matrice.
Un esempio pratico
Esempio 1 (diagonale principale)
Importo il modulo numpy nell'interprete python
>>> import numpy as np
Definisco una matrice 3x3 con la funzione array() di numpy.
>>> M=np.array([[1,2,3],[4,5,6],[7,8,9]])
Per estrarre la diagonale principale uso la funzione diag()
>>> np.diag(M)
Il risultato in output è il vettore con gli elementi della diagonale principale.
array([1, 5, 9])
Per estrarre una diagonale diversa da quella principale, mi basta aggiungere un secondo attributo.
>>> np.diag(M,k)
Se l'argomento è k>0, la funzione estrae le diagonali sopra la diagonale principale ( es. k=1, k=2, ecc. ).
Se k<0, la funzione estrae una diagonale sotto la diagonale principale ( es. k=-1, k=-2, ecc. )
Esempio 2 (antidiagonale)
Per ottenere l'antidiagonale aggiungo la funzione fliplr().
Poi calcolo la diagonale della matrice ribaltata.
>>> np.diag(np.fliplr(M))
La funzione fliplr() ribalta le colonne della matrice da destra a sinistra.
Il risultato in output è l'antidiagonale della matrice.
array([3, 5, 7])
E così via.