fastMisc
位于 Matrix
包(package)。 说明
Matrix
内部使用的 “Semi-API” 函数通常用于绕过 S4 调度并避免相关的开销。这些被导出以便为专家用户提供此函数。典型用户应继续依赖 S4 通用函数来调度合适的方法,例如调用 as(., <class>)
进行强制转换。
用法
.M2kind(from, kind = ".", sparse = NA)
.M2gen(from, kind = ".")
.M2sym(from, ...)
.M2tri(from, ...)
.M2diag(from)
.M2v(from)
.M2m(from)
.M2unpacked(from)
.M2packed(from)
.M2C(from)
.M2R(from)
.M2T(from)
.sparse2dense(from, packed = FALSE)
.diag2dense(from, shape = "t", packed = FALSE, uplo = "U")
.ind2dense(from, kind = "n")
.m2dense(from, class, uplo = "U", diag = "N")
.dense2sparse(from, repr = "C")
.diag2sparse(from, shape = "t", repr = "C", uplo = "U")
.ind2sparse(from, kind = "n", repr = ".")
.m2sparse(from, class, uplo = "U", diag = "N")
.tCRT(x, lazy = TRUE)
.diag.dsC(x, Chx = Cholesky(x, LDL = TRUE), res.kind = "diag")
.solve.dgC.lu (a, b, tol = .Machine$double.eps, check = TRUE)
.solve.dgC.qr (a, b, order = 3L, check = TRUE)
.solve.dgC.chol(a, b, check = TRUE)
.updateCHMfactor(object, parent, mult = 0)
参数
from , x , a , b |
|
kind |
指定结果的 “kind” 的字符串( |
shape |
指定结果的 “shape” 的字符串( |
repr |
一个字符串( |
packed |
指示结果是否应从 |
sparse |
指示结果是否应从 |
uplo |
一个字符串( |
diag |
一个字符串( |
class |
一个字符串,其前三个字符指定结果的类。它应与 |
... |
传递给 |
lazy |
一个逻辑,指示是否应使用最小分配来构造转置,但可能不保留表示。 |
Chx |
可选地, |
res.kind |
中的一个字符串 |
tol |
请参阅 |
order |
请参阅 |
check |
一个逻辑,指示是否应测试第一个参数是否从 |
object |
从虚拟类 |
parent |
|
mult |
正长度的数值向量。仅使用第一个元素,并且该元素必须是有限的。 |
细节
名称格式为 .<A>2<B>
的函数实现从虚拟类 A 到虚拟类 B 的 “nearest” 非虚拟子类的强制转换,其中虚拟类缩写如下:
M
m
-
矩阵或向量
v
-
向量
dense
unpacked
packed
sparse
C
R
T
gen
sym
tri
diag
ind
缩写应被视为指南,而不是行为的准确说明。例如,.m2dense
和 .m2sparse
除了矩阵之外还接受向量。
.tCRT(x)
如果lazy = TRUE
, 然后.tCRT
构造转置x
使用最有效的表示,这对于‘CRT' 是 '随机对照试验’。如果lazy = FALSE
, 然后.tCRT
保留了表示x
,表现为泛型函数的相应方法t
.
.diag.dsC(x)
.diag.dsC
将 x
的 Cholesky 分解计算为 (如果提供了 Chx
,则使用),以便根据 的对角线条目计算几个可能的统计数据之一。请参阅“参数”下的res.kind
。
.solve.dgC.*(a, b)
.solve.dgC.lu(a, b)
需要方阵 a
。 .solve.dgC.qr(a, b)
需要一个 “long” 矩阵 a
和 nrow(a) >= ncol(a)
。 .solve.dgC.chol(a, b)
需要 “wide” 矩阵 a
和 nrow(a) <= ncol(a)
。
所有这三个都可以用来直接求解稀疏线性系统。仅.solve.dgC.qr
和.solve.dgC.chol
可用于解决稀疏最小二乘问题。
.updateCHMfactor(object, parent, mult)
.updateCHMfactor
使用 Cholesky 分解 F(parent) + mult[1] * diag(nrow(parent))
的结果更新 object
,即 F(parent)
加上 mult[1]
乘以单位矩阵,其中 F = identity
如果 parent
是 dsCMatrix
和 F = tcrossprod
如果parent
是 dgCMatrix
。如果 object = Cholesky(S, ...)
,则 F(parent)
的非零模式必须与 S
的非零模式匹配。
例子
D. <- diag(x = c(1, 1, 2, 3, 5, 8))
D.0 <- Diagonal(x = c(0, 0, 0, 3, 5, 8))
S. <- toeplitz(as.double(1:6))
C. <- new("dgCMatrix", Dim = c(3L, 4L),
p = c(0L, 1L, 1L, 1L, 3L), i = c(1L, 0L, 2L), x = c(-8, 2, 3))
stopifnot(exprs = {
identical(.M2tri (D.), as(D., "triangularMatrix"))
identical(.M2sym (D.), as(D., "symmetricMatrix"))
identical(.M2diag(D.), as(D., "diagonalMatrix"))
identical(.M2kind(C., "l"),
as(C., "lMatrix"))
identical(.M2kind(.sparse2dense(C.), "l"),
as(as(C., "denseMatrix"), "lMatrix"))
identical(.diag2sparse(D.0, "t", "C"),
.dense2sparse(.diag2dense(D.0, "t", TRUE), "C"))
identical(.M2gen(.diag2dense(D.0, "s", FALSE)),
.sparse2dense(.M2gen(.diag2sparse(D.0, "s", "T"))))
identical(S.,
.M2m(.m2sparse(S., ".sR")))
identical(S. * lower.tri(S.) + diag(1, 6L),
.M2m(.m2dense (S., ".tr", "L", "U")))
identical(.M2R(C.), .M2R(.M2T(C.)))
identical(.tCRT(C.), .M2R(t(C.)))
})
A <- tcrossprod(C.)/6 + Diagonal(3, 1/3); A[1,2] <- 3; A
stopifnot(exprs = {
is.numeric( x. <- c(2.2, 0, -1.2) )
all.equal(x., .solve.dgC.lu(A, c(1,0,0), check=FALSE))
all.equal(x., .solve.dgC.qr(A, c(1,0,0), check=FALSE))
})
## Solving sparse least squares:
X <- rbind(A, Diagonal(3)) # design matrix X (for L.S.)
Xt <- t(X) # *transposed* X (for L.S.)
(y <- drop(crossprod(Xt, 1:3)) + c(-1,1)/1000) # small rand.err.
str(solveCh <- .solve.dgC.chol(Xt, y, check=FALSE)) # Xt *is* dgC..
stopifnot(exprs = {
all.equal(solveCh$coef, 1:3, tol = 1e-3)# rel.err ~ 1e-4
all.equal(solveCh$coef, drop(solve(tcrossprod(Xt), Xt %*% y)))
all.equal(solveCh$coef, .solve.dgC.qr(X, y, check=FALSE))
})
相关用法
- R facmul-methods 乘以矩阵因式分解的因数
- R formatSparseM 格式化稀疏数值矩阵实用程序
- R forceSymmetric-methods 强制矩阵为“对称矩阵”而不进行对称性检查
- R dtrMatrix-class 三角形稠密数值矩阵
- R solve-methods 函数求解矩阵包中的方法
- R updown-methods 更新和降级稀疏 Cholesky 分解
- R bdiag 构建分块对角矩阵
- R printSpMatrix 灵活格式化和打印稀疏矩阵
- R symmetricMatrix-class 包矩阵中对称矩阵的虚拟类
- R all.equal-methods 函数 all.equal() 的矩阵封装方法
- R boolmatmult-methods 布尔算术矩阵乘积:%&% 和方法
- R ltrMatrix-class 三角密集逻辑矩阵
- R Hilbert 生成希尔伯特矩阵
- R nearPD 最近正定矩阵
- R lsyMatrix-class 对称密集逻辑矩阵
- R CHMfactor-class 稀疏 Cholesky 分解
- R symmpart-methods 矩阵的对称部分和偏斜(对称)部分
- R sparseMatrix 从非零项构建一般稀疏矩阵
- R dgCMatrix-class 压缩、稀疏、面向列的数值矩阵
- R Cholesky-methods Cholesky 分解方法
- R Subassign-methods “[<-”的方法 - 分配给“矩阵”的子集
- R ldenseMatrix-class 密集逻辑矩阵的虚拟类“ldenseMatrix”
- R norm-methods 矩阵范数
- R ngeMatrix-class 一般密集非零模式矩阵的“ngeMatrix”类
- R CAex 阿尔伯斯的示例矩阵与“困难”特征分解
注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 “Low Level” Coercions and Methods。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。