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.
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]
transform the upper/lower triangular part of a symmetric matrix (2D array) into a 1D array and return it to the 2D format
indices = np.triu_indices_from(A)
A = np.asarray( A[indices] )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With