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