2013-12-17 11 views
7

Ho una matrice quadrata A (può essere qualsiasi dimensione) e voglio prendere la parte triangolare superiore e posizionare quei valori in una matrice senza i valori al di sotto della diagonale centrale (k = 0).come copiare solo i valori triangolari superiori nell'array da numpy.triu()?

A = array([[ 4, 0, 3], 
      [ 2, 4, -2], 
      [-2, -3, 7]]) 

utilizzando numpy.triu (A) mi viene a

A = array([[ 4, 0, 3], 
      [ 0, 4, -2], 
      [ 0, 0, 7]]) 

ma da qui come faccio a copiare solo gli elementi triangolari superiori in un array semplicemente? Quali:

[4, 0, 3, 4, -2, 7] 

stavo per scorrere solo se e copiare tutti gli elementi non nulli, tuttavia Zero nel triangolare superiore sono consentiti.

risposta

12

È possibile utilizzare di upper triangular indices function Numpy per estrarre il triangolare superiore di A in una matrice piatta:

>>> A[np.triu_indices(3)] 
array([ 4, 0, 3, 4, -2, 7]) 

e può facilmente convertire questo a un elenco Python:

>>> list(A[np.triu_indices(3)]) 
[4, 0, 3, 4, -2, 7] 
Problemi correlati