2013-12-17 2 views
7

Ich habe eine quadratische Matrix A (könnte eine beliebige Größe haben) und ich möchte den oberen dreieckigen Teil nehmen und diese Werte in ein Array ohne die Werte unter der Mitteldiagonale (k = 0) platzieren.Wie man nur obere dreieckige Werte in Array von numpy.triu() kopiert?

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

mit numpy.triu (A) bringt mich zu

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

aber von hier wie würde ich kopiere nur die oberen Dreieckselemente in eine einfach Array? Wie zum Beispiel:

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

ich alle Nicht-Null-Elemente, obwohl und gerade Kopie würde laufen, werden jedoch Nullen in dem oberen Dreieck erlaubt.

Antwort

12

Sie können Numpy des upper triangular indices function das obere Dreieck von A in eine flache Array zu extrahieren:

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

Und können dies leicht zu einer Python-Liste konvertieren:

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