2013-06-30 32 views
7

Ho generato una matrice triangolare inferiore e voglio completare la matrice usando i valori nella matrice triangolare inferiore per formare una matrice quadrata, simmetrica attorno agli zeri diagonali.Python - Come posso trovare la matrice quadrata di una matrice numpy triangolare inferiore? (con un triangolo superiore simmetrico)

lower_triangle = numpy.array([ 
[0,0,0,0], 
[1,0,0,0], 
[2,3,0,0], 
[4,5,6,0]]) 

voglio generare il seguente matrice completa, mantenendo la diagonale di zero:

complete_matrix = numpy.array([ 
[0, 1, 2, 4], 
[1, 0, 3, 5], 
[2, 3, 0, 6], 
[4, 5, 6, 0]]) 

Grazie.

risposta

9

Si può semplicemente aggiungerla alla sua trasposta:

>>> m 
array([[0, 0, 0, 0], 
     [1, 0, 0, 0], 
     [2, 3, 0, 0], 
     [4, 5, 6, 0]]) 
>>> m + m.T 
array([[0, 1, 2, 4], 
     [1, 0, 3, 5], 
     [2, 3, 0, 6], 
     [4, 5, 6, 0]]) 
7

È possibile utilizzare i numpy.triu_indices o numpy.tril_indices:

>>> a=np.array([[0, 0, 0, 0], 
...    [1, 0, 0, 0], 
...    [2, 3, 0, 0], 
...    [4, 5, 6, 0]]) 
>>> irows,icols = np.triu_indices(len(a),1) 
>>> a[irows,icols]=a[icols,irows] 
>>> a 
array([[0, 1, 2, 4], 
     [1, 0, 3, 5], 
     [2, 3, 0, 6], 
     [4, 5, 6, 0]]) 
+0

@DSM ho corretto la mia risposta originale ed ora ottenere la simmetria nel mio array – rtrwalker

+0

Questa è una risposta migliore rispetto a quella di DSM perché non si basa sugli elementi diagonali pari a zero. –

Problemi correlati