Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extract lower triangle portion of a matrix

Tags:

matrix

julia

I was wondering if there is a command or a package in Julia that permits us to extract directly the lower triangle portion of a matrix, excluding the diagonal. I can call R commands for that (like lowerTriangle of the gdata package), obviously, but I'd like to know if Julia has something similar. For example, imagine I have the matrix

1.0    0.751   0.734    
0.751   1.0    0.948    
0.734  0.948    1.0

I don't want to create a lower triangular matrix like

NA     NA      NA     
0.751   NA      NA    
0.734  0.948    NA

but extract the lower portion of the matrix as an array: 0.751 0.734 0.948

like image 205
coolsv Avatar asked Jun 01 '18 22:06

coolsv


1 Answers

If you're OK with creating a lower triangular matrix as an intermediate step, you can use logical indexing and tril! with an extra argument to get what you need.

julia> M = [1.0 0.751 0.734
0.751 1.0 0.948
0.734 0.948 1.0];
julia> v = M[tril!(trues(size(M)), -1)]
3-element Array{Float64, 1}:
0.751
0.734
0.948

The trues call returns an array of M's shape filled with boolean true values. tril! then prunes this down to just the part of the matrix that we want. The second argument to tril! tells it which superdiagonal to start from, which we use here to avoid the values in the leading diagonal.

We use the result of that for indexing into M, and that returns an array with the required values.

like image 134
Sundar R Avatar answered Oct 02 '22 09:10

Sundar R