Return the matrix obtained by setting to zero elements below a diagonal (triu), above a diagonal (tril), or outside of a general band (band).

band(x, k1, k2, ...)
triu(x, k = 0L, ...)
tril(x, k = 0L, ...)

Arguments

x

a matrix-like object

k,k1,k2

integers specifying the diagonals that are not set to zero, k1 <= k2. These are interpreted relative to the main diagonal, which is k = 0. Positive and negative values of k indicate diagonals above and below the main diagonal, respectively.

...

optional arguments passed to methods, currently unused by package Matrix.

Details

triu(x, k) is equivalent to band(x, k, dim(x)[2]). Similarly, tril(x, k) is equivalent to band(x, -dim(x)[1], k).

Value

An object of a suitable matrix class, inheriting from triangularMatrix where appropriate. It inherits from sparseMatrix if and only if x does.

Methods

x = "CsparseMatrix"

method for compressed, sparse, column-oriented matrices.

x = "RsparseMatrix"

method for compressed, sparse, row-oriented matrices.

x = "TsparseMatrix"

method for sparse matrices in triplet format.

x = "diagonalMatrix"

method for diagonal matrices.

x = "denseMatrix"

method for dense matrices in packed or unpacked format.

x = "matrix"

method for traditional matrices of implicit class matrix.

See also

bandSparse for the construction of a banded sparse matrix directly from its non-zero diagonals.

Examples

## A random sparse matrix :
set.seed(7)
m <- matrix(0, 5, 5)
m[sample(length(m), size = 14)] <- rep(1:9, length=14)
(mm <- as(m, "CsparseMatrix"))
#> 5 x 5 sparse Matrix of class "dgCMatrix"
#>               
#> [1,] . . 2 . 9
#> [2,] 4 3 4 . .
#> [3,] 7 6 . 1 .
#> [4,] . . . 2 5
#> [5,] . 1 5 8 3

tril(mm)        # lower triangle
#> 5 x 5 sparse Matrix of class "dtCMatrix"
#>               
#> [1,] . . . . .
#> [2,] 4 3 . . .
#> [3,] 7 6 . . .
#> [4,] . . . 2 .
#> [5,] . 1 5 8 3
tril(mm, -1)    # strict lower triangle
#> 5 x 5 sparse Matrix of class "dtCMatrix"
#>               
#> [1,] . . . . .
#> [2,] 4 . . . .
#> [3,] 7 6 . . .
#> [4,] . . . . .
#> [5,] . 1 5 8 .
triu(mm,  1)    # strict upper triangle
#> 5 x 5 sparse Matrix of class "dtCMatrix"
#>               
#> [1,] . . 2 . 9
#> [2,] . . 4 . .
#> [3,] . . . 1 .
#> [4,] . . . . 5
#> [5,] . . . . .
band(mm, -1, 2) # general band
#> 5 x 5 sparse Matrix of class "dgCMatrix"
#>               
#> [1,] . . 2 . .
#> [2,] 4 3 4 . .
#> [3,] . 6 . 1 .
#> [4,] . . . 2 5
#> [5,] . . . 8 3
(m5 <- Matrix(rnorm(25), ncol = 5))
#> 5 x 5 Matrix of class "dgeMatrix"
#>             [,1]       [,2]       [,3]       [,4]        [,5]
#> [1,] -0.53818915 -0.6319189 -0.3003816  0.5830777  0.01100886
#> [2,]  1.31664590 -0.8959369 -0.1591494  0.3259286  0.50627692
#> [3,] -1.50902855  1.0237546 -0.4689997 -0.2875874  0.40997329
#> [4,] -0.02387779  0.8084547  0.9013132 -0.8881565 -0.04562258
#> [5,] -0.35252883 -0.1082370  1.8316257 -0.6010564 -0.19032738
tril(m5)        # lower triangle
#> 5 x 5 Matrix of class "dtrMatrix"
#>      [,1]        [,2]        [,3]        [,4]        [,5]       
#> [1,] -0.53818915           .           .           .           .
#> [2,]  1.31664590 -0.89593695           .           .           .
#> [3,] -1.50902855  1.02375457 -0.46899973           .           .
#> [4,] -0.02387779  0.80845475  0.90131316 -0.88815653           .
#> [5,] -0.35252883 -0.10823695  1.83162570 -0.60105640 -0.19032738
tril(m5, -1)    # strict lower triangle
#> 5 x 5 Matrix of class "dtrMatrix"
#>      [,1]        [,2]        [,3]        [,4]        [,5]       
#> [1,]  0.00000000           .           .           .           .
#> [2,]  1.31664590  0.00000000           .           .           .
#> [3,] -1.50902855  1.02375457  0.00000000           .           .
#> [4,] -0.02387779  0.80845475  0.90131316  0.00000000           .
#> [5,] -0.35252883 -0.10823695  1.83162570 -0.60105640  0.00000000
triu(m5, 1)     # strict upper triangle
#> 5 x 5 Matrix of class "dtrMatrix"
#>      [,1]        [,2]        [,3]        [,4]        [,5]       
#> [1,]  0.00000000 -0.63191893 -0.30038157  0.58307770  0.01100886
#> [2,]           .  0.00000000 -0.15914936  0.32592858  0.50627692
#> [3,]           .           .  0.00000000 -0.28758745  0.40997329
#> [4,]           .           .           .  0.00000000 -0.04562258
#> [5,]           .           .           .           .  0.00000000
band(m5, -1, 2) # general band
#> 5 x 5 Matrix of class "dgeMatrix"
#>            [,1]       [,2]       [,3]       [,4]        [,5]
#> [1,] -0.5381891 -0.6319189 -0.3003816  0.0000000  0.00000000
#> [2,]  1.3166459 -0.8959369 -0.1591494  0.3259286  0.00000000
#> [3,]  0.0000000  1.0237546 -0.4689997 -0.2875874  0.40997329
#> [4,]  0.0000000  0.0000000  0.9013132 -0.8881565 -0.04562258
#> [5,]  0.0000000  0.0000000  0.0000000 -0.6010564 -0.19032738
(m65 <- Matrix(rnorm(30), ncol = 5))  # not square
#> 6 x 5 Matrix of class "dgeMatrix"
#>            [,1]       [,2]        [,3]       [,4]        [,5]
#> [1,]  0.2564325  0.6478339  0.18137487 -1.7200493  0.96484367
#> [2,]  0.3076799 -1.4121579 -0.37199734 -0.8282303 -0.06740435
#> [3,]  0.1705786  0.7132121 -0.89222280 -0.2632791 -0.76809014
#> [4,] -0.1561042 -0.2101720 -0.03456105  0.6318391 -0.46436630
#> [5,]  1.4958478 -2.3905787 -0.28704112  0.3296523 -0.99336354
#> [6,]  1.1677221 -0.9069923 -0.40203197  0.8040658 -1.23554166
triu(m65)       # result not "dtrMatrix" unless square
#> 6 x 5 Matrix of class "dgeMatrix"
#>           [,1]       [,2]       [,3]       [,4]        [,5]
#> [1,] 0.2564325  0.6478339  0.1813749 -1.7200493  0.96484367
#> [2,] 0.0000000 -1.4121579 -0.3719973 -0.8282303 -0.06740435
#> [3,] 0.0000000  0.0000000 -0.8922228 -0.2632791 -0.76809014
#> [4,] 0.0000000  0.0000000  0.0000000  0.6318391 -0.46436630
#> [5,] 0.0000000  0.0000000  0.0000000  0.0000000 -0.99336354
#> [6,] 0.0000000  0.0000000  0.0000000  0.0000000  0.00000000
(sm5 <- crossprod(m65)) # symmetric
#> 5 x 5 Matrix of class "dpoMatrix"
#>            [,1]      [,2]       [,3]       [,4]      [,5]
#> [1,]  3.8150258 -4.748956 -1.1135761  0.5925862 -2.760542
#> [2,] -4.7489565  9.504224  1.0645738 -1.7826242  3.765370
#> [3,] -1.1135761  1.064574  1.2125572 -0.2086916  1.683293
#> [4,]  0.5925862 -1.782624 -0.2086916  4.8682638 -3.015856
#> [5,] -2.7605419  3.765370  1.6832926 -3.0158564  4.254399
   band(sm5, -1, 1)# "dsyMatrix": symmetric band preserves symmetry property
#> 5 x 5 Matrix of class "dsyMatrix"
#>           [,1]      [,2]       [,3]       [,4]      [,5]
#> [1,]  3.815026 -4.748956  0.0000000  0.0000000  0.000000
#> [2,] -4.748956  9.504224  1.0645738  0.0000000  0.000000
#> [3,]  0.000000  1.064574  1.2125572 -0.2086916  0.000000
#> [4,]  0.000000  0.000000 -0.2086916  4.8682638 -3.015856
#> [5,]  0.000000  0.000000  0.0000000 -3.0158564  4.254399
as(band(sm5, -1, 1), "sparseMatrix")# often preferable
#> 5 x 5 sparse Matrix of class "dsCMatrix"
#>                                                         
#> [1,]  3.815026 -4.748956  .          .          .       
#> [2,] -4.748956  9.504224  1.0645738  .          .       
#> [3,]  .         1.064574  1.2125572 -0.2086916  .       
#> [4,]  .         .        -0.2086916  4.8682638 -3.015856
#> [5,]  .         .         .         -3.0158564  4.254399
(sm <- round(crossprod(triu(mm/2)))) # sparse symmetric ("dsC*")
#> 5 x 5 sparse Matrix of class "dsCMatrix"
#>                
#> [1,] . . . .  .
#> [2,] . 2 3 .  .
#> [3,] . 3 5 .  4
#> [4,] . . . 1  2
#> [5,] . . 4 2 29
band(sm, -1,1) # remains "dsC", *however*
#> 5 x 5 sparse Matrix of class "dsCMatrix"
#>                
#> [1,] . . . .  .
#> [2,] . 2 3 .  .
#> [3,] . 3 5 .  .
#> [4,] . . . 1  2
#> [5,] . . . 2 29
band(sm, -2,1) # -> "dgC"
#> 5 x 5 sparse Matrix of class "dgCMatrix"
#>                
#> [1,] . . . .  .
#> [2,] . 2 3 .  .
#> [3,] . 3 5 .  .
#> [4,] . . . 1  2
#> [5,] . . 4 2 29