當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


R fastMisc “低級”強製和方法


R語言 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

Matrix 、矩陣或向量。

kind

指定結果的 “kind” 的字符串( ".""n""l""d" )。 "." 表示應該保留from 的類型。 "n" 指示結果應繼承自nMatrix(依此類推)。

shape

指定結果的 “shape” 的字符串( ".""g""s""t" )。 "." 表示應保留from 的形狀。 "g" 指示結果應繼承自generalMatrix(依此類推)。

repr

一個字符串( ".""C""R""T" )指定結果的稀疏表示。 "." 僅被 .ind2sparse 接受,並表示最有效的表示形式,即 margin = 2 ( 1 ) 的 "C" ( "R" )。 "C" 指示結果應繼承自CsparseMatrix(依此類推)。

packed

指示結果是否應從 packedMatrix 繼承而不是從 unpackedMatrix 繼承的邏輯。對於繼承自 generalMatrixfrom ,它會被忽略。

sparse

指示結果是否應從 sparseMatrix 繼承而不是從 denseMatrix 繼承的邏輯。如果是 NA ,那麽當且僅當 from 是時,結果才會是形式稀疏的。

uplo

一個字符串( "U""L" ),指示結果(如果對稱或三角形)是否應存儲 from 的上三角形或下三角形。對邊三角形中from 的元素將被忽略。

diag

一個字符串( "N""U" ),指示結果(如果是三角形)形式上應為非單位三角形還是單位三角形。在單位三角形的情況下,from 的對角線元素被忽略。

class

一個字符串,其前三個字符指定結果的類。它應與 .m2dense 的模式 "^[.nld](ge|sy|tr|sp|tp)".m2sparse"^[.nld][gst][CRT]" 匹配,其中第一個位置的 "." 相當於邏輯參數的 "l" 和數字參數的 "d"

...

傳遞給 isSymmetricisTriangular 的可選參數。

lazy

一個邏輯,指示是否應使用最小分配來構造轉置,但可能不保留表示。

Chx

可選地,xCholesky(x, ...) 分解。如果提供,則 x 未使用。

res.kind

中的一個字符串c("trace", "sumLog", "prod", "min", "max", "range", "diag", "diagBack").

tol

請參閱lu-methods

order

請參閱qr-methods

check

一個邏輯,指示是否應測試第一個參數是否從 dgCMatrix 繼承,並在必要時進行強製轉換。僅當已知已從 dgCMatrix 繼承時,才設置為 FALSE 以提高速度。

object

從虛擬類 CHMfactor 繼承的 Cholesky 分解,幾乎總是調用泛型函數 Cholesky 的結果。

parent

dsCMatrix 或類 dgCMatrix 的對象。

mult

正長度的數值向量。僅使用第一個元素,並且該元素必須是有限的。

細節

名稱格式為 .<A>2<B> 的函數實現從虛擬類 A 到虛擬類 B 的 “nearest” 非虛擬子類的強製轉換,其中虛擬類縮寫如下:

M

Matrix

m

矩陣或向量

v

向量

dense

denseMatrix

unpacked

unpackedMatrix

packed

packedMatrix

sparse

CsparseMatrixRsparseMatrixTsparseMatrix

C

CsparseMatrix

R

RsparseMatrix

T

TsparseMatrix

gen

generalMatrix

sym

symmetricMatrix

tri

triangularMatrix

diag

diagonalMatrix

ind

indMatrix

縮寫應被視為指南,而不是行為的準確說明。例如,.m2dense.m2sparse 除了矩陣之外還接受向量。

.tCRT(x)

如果lazy = TRUE, 然後.tCRT構造轉置x使用最有效的表示,這對於‘⁠CRT⁠' 是 '⁠隨機對照試驗⁠’。如果lazy = FALSE, 然後.tCRT保留了表示x,表現為泛型函數的相應方法t.

.diag.dsC(x)

.diag.dsCx 的 Cholesky 分解計算為 (如果提供了 Chx,則使用),以便根據 的對角線條目計算幾個可能的統計數據之一。請參閱“參數”下的res.kind

.solve.dgC.*(a, b)

.solve.dgC.lu(a, b) 需要方陣 a.solve.dgC.qr(a, b) 需要一個 “long” 矩陣 anrow(a) >= ncol(a).solve.dgC.chol(a, b) 需要 “wide” 矩陣 anrow(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 如果 parentdsCMatrixF = tcrossprod如果parentdgCMatrix 。如果 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-devel大神的英文原創作品 “Low Level” Coercions and Methods。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。