Matrix (version 1.5-4.1)

# band: Extract bands of a matrix

## Description

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

## Usage

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

## Value

An object of a suitable matrix class, inheriting from

`triangularMatrix` where appropriate. It inherits from `sparseMatrix` if and only if `x` does.

## Arguments

x

a matrix-like object

k,k1,k2

integers specifying the diagonals that are not set to zero. 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 methods (currently unused by package Matrix)

## 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`.

## 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)`.

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

## Examples

Run this code
``````## 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"))

tril(mm)        # lower triangle
tril(mm, -1)    # strict lower triangle
triu(mm,  1)    # strict upper triangle
band(mm, -1, 2) # general band
(m5 <- Matrix(rnorm(25), ncol = 5))
tril(m5)        # lower triangle
tril(m5, -1)    # strict lower triangle
triu(m5, 1)     # strict upper triangle
band(m5, -1, 2) # general band
(m65 <- Matrix(rnorm(30), ncol = 5))  # not square
triu(m65)       # result not "dtrMatrix" unless square
(sm5 <- crossprod(m65)) # symmetric
band(sm5, -1, 1)# "dsyMatrix": symmetric band preserves symmetry property
as(band(sm5, -1, 1), "sparseMatrix")# often preferable
(sm <- round(crossprod(triu(mm/2)))) # sparse symmetric ("dsC*")
band(sm, -1,1) # remains "dsC", *however*
band(sm, -2,1) # -> "dgC"

## this uses special methods
(x.x <- crossprod(mm))
tril(x.x)
xx <- tril(x.x) + triu(x.x, 1) ## the same as x.x (but stored differently):
txx <- t(as(xx, "symmetricMatrix"))
stopifnot(identical(triu(x.x), t(tril(x.x))),
identical(class(x.x), class(txx)),
identical(as(x.x, "generalMatrix"), as(txx, "generalMatrix")))

``````

Run the code above in your browser using DataCamp Workspace