Shayan  
                
               
                 
              
                  
                    April 15, 2024,  5:49pm
                   
                   
              1 
               
             
            
              Consider the following matrix:
julia> c = rand(2, 2)
2×2 Matrix{Float64}:
 0.0443768  0.515352
 0.531426   0.967584
 
Expected output:
1-element Vector{Float64}:
0.531426
 
I can do:
julia> using LinearAlgebra: LowerTriangular
julia> LowerTriangular(c)
2×2 LowerTriangular{Float64, Matrix{Float64}}:
 0.0443768   ⋅
 0.531426   0.967584
 
Collecting the previous lower triangular includes the diagonal of the matrix too. I want to omit the diagonal. How to do it?
             
            
               
               
               
            
            
           
          
            
            
              
You can use the tril function :
julia> c = rand(4,4)
4×4 Matrix{Float64}:
 0.508891  0.659778  0.639252  0.569137
 0.212345  0.834971  0.233612  0.564073
 0.812287  0.760213  0.224285  0.466787
 0.872574  0.516204  0.701075  0.359622
julia> LowerTriangular(tril(c, -1))
4×4 LowerTriangular{Float64, Matrix{Float64}}:
 0.0        ⋅         ⋅         ⋅ 
 0.212345  0.0        ⋅         ⋅ 
 0.812287  0.760213  0.0        ⋅ 
 0.872574  0.516204  0.701075  0.0
 
It’s not clear how useful the LowerTriangular type is here, however, rather than simply tril(c, -1) stored as a Matrix.     The main utility of the LowerTriangular type is to support fast methods for solving Lx =b  lower-triangular systems, but with a zero diagonal the problem is singular so those methods aren’t applicable.
(Another application of LowerTriangular  is to have an in-place lower-triangular view of a matrix where you are storing something else in the upper triangle, as sometimes happens with in-place matrix factorizations, but that’s not the case if you use tril.)
             
            
               
               
              1 Like 
            
            
           
          
            
              
                Shayan  
                
               
              
                  
                    April 15, 2024,  5:55pm
                   
                   
              3 
               
             
            
              
Isn’t tril(c, -1) enough?
 stevengj:
 
It’s not clear how useful the LowerTriangular type is here, however, rather than simply tril(c, -1) stored as a Matrix. The main utility of the LowerTriangular type is to support fast methods for solving Lx =bLx=bLx =b lower-triangular systems, but with a zero diagonal the problem is singular so those methods aren’t applicable.
 
 
Thank you so much!
             
            
               
               
               
            
            
           
          
            
            
              
Yes, depends on what matrix type you want to use.  See also the comments at the bottom of my revised post (I was editing it while you responded).
             
            
               
               
              1 Like 
            
            
           
          
            
              
                Dan  
                
               
              
                  
                    April 15, 2024,  6:07pm
                   
                   
              5 
               
             
            
              If you wanted the vector of entries, maybe this will do:
julia> A = rand(3,3)
3×3 Matrix{Float64}:
 0.212689  0.222497  0.34268
 0.376084  0.004906  0.706805
 0.395929  0.334694  0.883166
julia> [v for (k,v) in pairs(A) if k[1]>k[2]]
3-element Vector{Float64}:
 0.37608410776838963
 0.3959294893831178
 0.33469399665884414
 
             
            
               
               
              4 Likes