Learn R Programming

Matrix (version 1.0-4)

band: Extract bands of a matrix

Description

Returns a new matrix formed by extracting the lower triangle (tril) or the upper triangle (triu) or a general band relative to the diagonal (band), and setting other elements to zero. The general forms of these functions include integer arguments to specify how many diagonal bands above or below the main diagonal are not set to zero.

Usage

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

Arguments

x
a matrix-like object
k,k1,k2
integers specifying the diagonal bands that will not be set to zero. These are given relative to the main diagonal, which is k=0. A negative value of k indicates a diagonal below the main diagonal and a positive value ind
...
Optional arguments used by specific methods. (None used at present.)

Value

  • An object of an appropriate matrix class. The class of the value of tril or triu inherits from triangularMatrix when appropriate. Note that the result is of class sparseMatrix only if x is.

See Also

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), nc = 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), nc = 5))  # not square
triu(m65)       # result in not dtrMatrix unless square
(sm5 <- crossprod(m65)) # symmetric
   band(sm5, -1, 1)# symmetric band preserves symmetry property
as(band(sm5, -1, 1), "sparseMatrix")# often preferable
## 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 DataLab