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.band(x, k1, k2, ...)
tril(x, k = 0, ...)
triu(x, k = 0, ...)
k=0
. A negative value of k
indicates a
diagonal below the main diagonal and a positive value indtril
or triu
inherits from
triangularMatrix
when appropriate. Note that the
result is of class sparseMatrix
only if x
is.bandSparse
for the construction of a banded
sparse matrix directly from its non-zero diagonals.## 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