当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R expand-methods 展开矩阵分解


R语言 expand-methods 位于 Matrix 包(package)。

说明

expand1expand2 从指定矩阵分解的对象构造矩阵因子。此类对象通常不会显式存储因子,而是采用紧凑表示来节省内存。

用法

expand1(x, which, ...)
expand2(x, ...)

expand (x, ...)

参数

x

矩阵分解,通常继承自虚拟类 MatrixFactorization

which

表示矩阵因子的字符串。

...

传入或传出方法的更多参数。

细节

保留 expand 的方法只是为了向后兼容 Matrix < 1.6-0 。新代码应使用 expand1expand2 ,它们的方法提供更多控制并且行为更一致。值得注意的是, expand2 遵循以下规则:返回列表中矩阵因子的乘积应重现(在一定容差范围内)因式分解矩阵,包括其 dimnames

因此,如果 x 是一个矩阵,而 y 是它的分解,那么

    all.equal(as(x, "matrix"), as(Reduce(`%*%`, expand2(y)), "matrix"))

在大多数情况下应该返回 TRUE

expand1 返回一个继承自虚拟类 Matrix 的对象,表示 which 指示的因子,始终没有行名称和列名称。

expand2 返回因子列表,通常使用常规表示法进行名称,如 list(L=, U=) 中。第一个和最后一个因子获取因式分解矩阵的行名称和列名称,这些名称保存在 xDimnames 槽中。

方法

下表列出了 expand1 的方法以及参数 which 的允许值。

class(x) which
Schur c("Q", "T", "Q.")
denseLU c("P1", "P1.", "L", "U")
sparseLU c("P1", "P1.", "P2", "P2.", "L", "U")
sparseQR c("P1", "P1.", "P2", "P2.", "Q", "Q1", "R", "R1")
BunchKaufman , pBunchKaufman c("U", "DU", "U.", "L", "DL", "L.")
Cholesky , pCholesky c("P1", "P1.", "L1", "D", "L1.", "L", "L.")
CHMsimpl , CHMsimpl c("P1", "P1.", "L1", "D", "L1.", "L", "L.")

下面说明expand2expand的方法。因子名称和类别也适用于 expand1

expand2

signature(x = "CHMsimpl") :将分解 扩展为 list(P1., L1, D, L1., P1) (默认)或 list(P1., L, L., P1) ,具体取决于可选逻辑参数 LDLP1P1.pMatrixL1L1.LL.dtCMatrixDddiMatrix .

expand2

signature(x = "CHMsuper") :与 CHMsimpl 相同,但三角因子存储为 dgCMatrix

expand2

signature(x = "p?Cholesky") :将分解 扩展为 list(L1, D, L1.) (默认)或 list(L, L.) ,具体取决于可选逻辑参数 LDLL1L1.LL.dtrMatrixdtpMatrixDddiMatrix

expand2

signature(x = "p?BunchKaufman") :将 展开分解,其中 list(U, DU, U.)list(L, DL, L.) ,具体取决于 x@uplo 。如果可选参数 completeTRUE ,则返回一个未命名列表,给出 矩阵因子的完整扩展。 表示为pMatrix 表示为dtCMatrix 表示为dsCMatrix

expand2

signature(x = "Schur") :将分解 展开为 list(Q, T, Q.)QQ.x@Qt(x@Q)DimnamesTx@T

expand2

signature(x = "sparseLU") :将分解 展开为 list(P1., L, U, P2.)P1.P2.pMatrixLUdtCMatrix

expand2

signature(x = "denseLU") :将分解 展开为 list(P1., L, U)P1.pMatrix ,如果是正方形,LUdtrMatrix ,否则是 dgeMatrix

expand2

signature(x = "sparseQR") :将分解 扩展为 list(P1., Q, R, P2.)list(P1., Q1, R1, P2.) ,具体取决于可选逻辑参数 completeP1.P2.pMatrixQQ1dgeMatrixRdgCMatrixR1dtCMatrix

expand

signature(x = "CHMfactor") :与 expand2 相同,但返回 list(P, L)expand(x)[["P"]]expand2(x)[["P1"]] 表示相同的置换矩阵 ,但具有相反的margin 槽和倒置的perm 槽。 expand(x) 的组件不保留 x@Dimnames

expand

signature(x = "sparseLU"): 作为expand2,但返回list(P, L, U, Q).expand(x)[["Q"]]expand2(x)[["P2."]]表示相同的置换矩阵 但有相反的margin插槽和倒置perm插槽。expand(x)[["P"]]表示置换矩阵 而不是它的转置 ;这是expand2(x)[["P1."]]与倒立的perm投币口。expand(x)[["L"]]expand2(x)[["L"]]表示同一个单位下三角矩阵 ,但与diag插槽等于"N""U", 分别。expand(x)[["L"]]expand(x)[["U"]]存储排列后的第一和第二分量x@Dimnames在他们的Dimnames插槽。

expand

signature(x = "denseLU") :与 expand2 相同,但返回 list(L, U, P)expand(x)[["P"]]expand2(x)[["P1."]] 与模 Dimnames 相同。 expand(x) 的组件不保留 x@Dimnames

例子


showMethods("expand1", inherited = FALSE)
showMethods("expand2", inherited = FALSE)
set.seed(0)

(A <- Matrix(rnorm(9L, 0, 10), 3L, 3L))
(lu.A <- lu(A))
(e.lu.A <- expand2(lu.A))
stopifnot(exprs = {
    is.list(e.lu.A)
    identical(names(e.lu.A), c("P1.", "L", "U"))
    all(sapply(e.lu.A, is, "Matrix"))
    all.equal(as(A, "matrix"), as(Reduce(`%*%`, e.lu.A), "matrix"))
})

## 'expand1' and 'expand2' give equivalent results modulo
## dimnames and representation of permutation matrices;
## see also function 'alt' in example("Cholesky-methods")
(a1 <- sapply(names(e.lu.A), expand1, x = lu.A, simplify = FALSE))
all.equal(a1, e.lu.A)

## see help("denseLU-class") and others for more examples

也可以看看

可分解矩阵的虚拟类compMatrix

矩阵分解的虚拟类MatrixFactorization

用于计算因式分解的通用函数 CholeskyBunchKaufmanSchurluqr

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Expand Matrix Factorizations。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。