Diagonal
Create Diagonal Matrix Object
Description
Create a diagonal matrix object, i.e., an object inheriting from diagonalMatrix
(or a “standard” CsparseMatrix
diagonal matrix in cases that is prefered).
Usage
Diagonal(n, x = NULL) .symDiagonal(n, x = rep.int(1,n), uplo = "U", kind) .trDiagonal(n, x = 1, uplo = "U", unitri=TRUE, kind) .sparseDiagonal(n, x = 1, uplo = "U", shape = if(missing(cols)) "t" else "g", unitri, kind, cols = if(n) 0:(n - 1L) else integer(0))
Arguments
n | integer specifying the dimension of the (square) matrix. If missing, |
x | numeric or logical; if missing, a unit diagonal n x n matrix is created. |
uplo | for |
shape | string of 1 character, one of |
unitri | optional logical indicating if a triangular result should be “unit-triangular”, i.e., with |
kind | string of 1 character, one of |
cols | integer vector with values from |
Value
Diagonal()
returns an object of class ddiMatrix
or ldiMatrix
(with “superclass” diagonalMatrix
).
.symDiagonal()
returns an object of class dsCMatrix
or lsCMatrix
, i.e., a sparse symmetric matrix. Analogously, .triDiagonal
gives a sparse triangularMatrix
. This can be more efficient than Diagonal(n)
when the result is combined with further symmetric (sparse) matrices, e.g., in kronecker
, however not for matrix multiplications where Diagonal()
is clearly preferred.
.sparseDiagonal()
, the workhorse of .symDiagonal
and .trDiagonal
returns a CsparseMatrix
(the resulting class depending on shape
and kind
) representation of Diagonal(n)
, or, when cols
are specified, of Diagonal(n)[, cols+1]
.
Author(s)
Martin Maechler
See Also
the generic function diag
for extraction of the diagonal from a matrix works for all “Matrices”.
bandSparse
constructs a banded sparse matrix from its non-zero sub-/super - diagonals. band(A)
returns a band matrix containing some sub-/super - diagonals of A
.
Matrix
for general matrix construction; further, class diagonalMatrix
.
Examples
Diagonal(3) Diagonal(x = 10^(3:1)) Diagonal(x = (1:4) >= 2)#-> "ldiMatrix" ## Use Diagonal() + kronecker() for "repeated-block" matrices: M1 <- Matrix(0+0:5, 2,3) (M <- kronecker(Diagonal(3), M1)) (S <- crossprod(Matrix(rbinom(60, size=1, prob=0.1), 10,6))) (SI <- S + 10*.symDiagonal(6)) # sparse symmetric still stopifnot(is(SI, "dsCMatrix")) (I4 <- .sparseDiagonal(4, shape="t"))# now (2012-10) unitriangular stopifnot(I4@diag == "U", all(I4 == diag(4)))
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.