12
votes

I have a square matrix A (could be any size) and I want to take the upper triangular part and place those values in an array without the values below the center diagonal (k=0).

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

using numpy.triu(A) gets me to

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

but from here how would I copy only the upper triangular elements into a simply array? Such as:

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

I was going to just iterate though and copy all non-zero elements, however zero's in the upper triangular are allowed.

2

2 Answers

16
votes

You can use Numpy's upper triangular indices function to extract the upper triangular of A into a flat array:

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

And can easily convert this to a Python list:

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