sparseMatrix
位於 Matrix
包(package)。 說明
根據非零條目的位置和值,以用戶友好方式構造稀疏矩陣(繼承自虛擬 class
CsparseMatrix
、 RsparseMatrix
或 TsparseMatrix
)。
建議使用此接口,而不是通過 new("..[CRT]Matrix", ...)
等調用直接構造。
用法
sparseMatrix(i, j, p, x, dims, dimnames,
symmetric = FALSE, triangular = FALSE, index1 = TRUE,
repr = c("C", "R", "T"), giveCsparse,
check = TRUE, use.last.ij = FALSE)
參數
i , j |
長度相等的整數向量,指定矩陣的非零(或非 |
p |
指針的整數向量,每一列(或行)一個,指向列(或行)中元素的初始(從零開始)索引。必須恰好缺少 |
x |
可選,通常為矩陣條目的非零值。如果指定,則長度必須等於 |
dims |
可選的長度為 2 的矩陣維度整數向量。如果丟失,則使用 |
dimnames |
|
symmetric |
邏輯指示結果矩陣是否應該是對稱的。在這種情況下, 應僅指定一個三角形(上三角形或下三角形)。 |
triangular |
邏輯指示結果矩陣是否應該是三角形的。在這種情況下, 應僅指定一個三角形(上三角形或下三角形)。 |
index1 |
合乎邏輯的。如果 |
repr |
|
giveCsparse |
(已棄用,已替換為 |
check |
邏輯指示是否在返回之前檢查結果是否正式有效。除非您知道自己在做什麽,否則請勿設置為 |
use.last.ij |
邏輯指示,在重複(重複)對 |
細節
必須恰好缺少參數 i
、 j
和 p
之一。
在典型用法中,p
缺失,i
和 j
是正整數向量,x
是數值向量。這三個向量必須具有相同的長度,形成稀疏矩陣的三元組表示。
如果i
或j
丟失,則p
必須是第一個元素為零的非遞減整數向量。它提供行或列索引的壓縮或 “pointer” 表示(以缺失者為準)。 p
、 rep(seq_along(dp),dp)
的擴展形式,其中 dp <- diff(p)
用作(從 1 開始的)行或列索引。
您不能將 singular
和 triangular
同時設置為 true;而是使用Diagonal()
(或其替代方案,請參閱此處)。
i
、 j
、 p
和 index1
的值用於創建基於 1 的索引向量 i
和 j
,從中使用 x
給出的數值構造 TsparseMatrix
,如果不缺失的話。請注意,在這種情況下,當重複某些對 (又名“duplicated”)時,將添加相應的 ,與TsparseMatrix
類的定義保持一致,除非use.last.ij
設置為true。
默認情況下,當 repr = "C"
時,返回從此三元組形式派生的 CsparseMatrix
,其中 repr = "R"
現在允許直接獲取 RsparseMatrix
,而 repr = "T"
將結果保留為 TsparseMatrix
。
默認返回 CsparseMatrix
對象而不是三元組格式的原因是,在執行矩陣運算時,壓縮列形式更容易使用。特別是,如果 x
中沒有零,則 CsparseMatrix
是稀疏矩陣的唯一表示。
值
稀疏矩陣,默認采用壓縮稀疏列格式,並且(正式)沒有對稱或三角形結構,即默認繼承自 CsparseMatrix
和 generalMatrix
。
注意
如果您想使用現有稀疏矩陣中基於 0 的 i
(和 j
)槽,則確實需要使用 index1 = FALSE
(或將 + 1
添加到 i
和 j
)。
例子
## simple example
i <- c(1,3:8); j <- c(2,9,6:10); x <- 7 * (1:7)
(A <- sparseMatrix(i, j, x = x)) ## 8 x 10 "dgCMatrix"
summary(A)
str(A) # note that *internally* 0-based row indices are used
(sA <- sparseMatrix(i, j, x = x, symmetric = TRUE)) ## 10 x 10 "dsCMatrix"
(tA <- sparseMatrix(i, j, x = x, triangular= TRUE)) ## 10 x 10 "dtCMatrix"
stopifnot( all(sA == tA + t(tA)) ,
identical(sA, as(tA + t(tA), "symmetricMatrix")))
## dims can be larger than the maximum row or column indices
(AA <- sparseMatrix(c(1,3:8), c(2,9,6:10), x = 7 * (1:7), dims = c(10,20)))
summary(AA)
## i, j and x can be in an arbitrary order, as long as they are consistent
set.seed(1); (perm <- sample(1:7))
(A1 <- sparseMatrix(i[perm], j[perm], x = x[perm]))
stopifnot(identical(A, A1))
## The slots are 0-index based, so
try( sparseMatrix(i=A@i, p=A@p, x= seq_along(A@x)) )
## fails and you should say so: 1-indexing is FALSE:
sparseMatrix(i=A@i, p=A@p, x= seq_along(A@x), index1 = FALSE)
## the (i,j) pairs can be repeated, in which case the x's are summed
(args <- data.frame(i = c(i, 1), j = c(j, 2), x = c(x, 2)))
(Aa <- do.call(sparseMatrix, args))
## explicitly ask for elimination of such duplicates, so
## that the last one is used:
(A. <- do.call(sparseMatrix, c(args, list(use.last.ij = TRUE))))
stopifnot(Aa[1,2] == 9, # 2+7 == 9
A.[1,2] == 2) # 2 was *after* 7
## for a pattern matrix, of course there is no "summing":
(nA <- do.call(sparseMatrix, args[c("i","j")]))
dn <- list(LETTERS[1:3], letters[1:5])
## pointer vectors can be used, and the (i,x) slots are sorted if necessary:
m <- sparseMatrix(i = c(3,1, 3:2, 2:1), p= c(0:2, 4,4,6), x = 1:6, dimnames = dn)
m
str(m)
stopifnot(identical(dimnames(m), dn))
sparseMatrix(x = 2.72, i=1:3, j=2:4) # recycling x
sparseMatrix(x = TRUE, i=1:3, j=2:4) # recycling x, |--> "lgCMatrix"
## no 'x' --> patter*n* matrix:
(n <- sparseMatrix(i=1:6, j=rev(2:7)))# -> ngCMatrix
## an empty sparse matrix:
(e <- sparseMatrix(dims = c(4,6), i={}, j={}))
## a symmetric one:
(sy <- sparseMatrix(i= c(2,4,3:5), j= c(4,7:5,5), x = 1:5,
dims = c(7,7), symmetric=TRUE))
stopifnot(isSymmetric(sy),
identical(sy, ## switch i <-> j {and transpose }
t( sparseMatrix(j= c(2,4,3:5), i= c(4,7:5,5), x = 1:5,
dims = c(7,7), symmetric=TRUE))))
## rsparsematrix() calls sparseMatrix() :
M1 <- rsparsematrix(1000, 20, nnz = 200)
summary(M1)
## pointers example in converting from other sparse matrix representations.
if(requireNamespace("SparseM") &&
packageVersion("SparseM") >= "0.87" &&
nzchar(dfil <- system.file("extdata", "rua_32_ax.rua", package = "SparseM"))) {
X <- SparseM::model.matrix(SparseM::read.matrix.hb(dfil))
XX <- sparseMatrix(j = X@ja, p = X@ia - 1L, x = X@ra, dims = X@dimension)
validObject(XX)
## Alternatively, and even more user friendly :
X. <- as(X, "Matrix") # or also
X2 <- as(X, "sparseMatrix")
stopifnot(identical(XX, X.), identical(X., X2))
}
也可以看看
Matrix(*, sparse=TRUE)
用於從稠密矩陣構造此類矩陣。這在小樣本中更容易,但對於需要像 sparseMatrix()
之類的大矩陣來說效率較低(或不可能)。此外,bdiag
和 Diagonal
用於(塊)對角線,bandSparse
用於帶狀稀疏矩陣構造函數。
通過 rsparsematrix()
生成隨機稀疏矩陣。
標準R xtabs(*, sparse=TRUE)
,對於稀疏表和sparse.model.matrix()
用於構建稀疏模型矩陣。
考慮CsparseMatrix
和類似的類定義幫助文件。
相關用法
- R sparseMatrix-class 虛擬類“sparseMatrix”——稀疏矩陣之母
- R sparseQR-class 稀疏 QR 分解
- R sparse.model.matrix 構造稀疏設計/模型矩陣
- R sparseVector-class 稀疏向量類
- R sparseLU-class 稀疏 LU 分解
- R sparseVector 從非零條目構造稀疏向量
- R spMatrix 三元組的稀疏矩陣構造函數
- R solve-methods 函數求解矩陣包中的方法
- R symmetricMatrix-class 包矩陣中對稱矩陣的虛擬類
- R symmpart-methods 矩陣的對稱部分和偏斜(對稱)部分
- R dtrMatrix-class 三角形稠密數值矩陣
- R facmul-methods 乘以矩陣因式分解的因數
- R updown-methods 更新和降級稀疏 Cholesky 分解
- R bdiag 構建分塊對角矩陣
- R printSpMatrix 靈活格式化和打印稀疏矩陣
- R all.equal-methods 函數 all.equal() 的矩陣封裝方法
- R boolmatmult-methods 布爾算術矩陣乘積:%&% 和方法
- R ltrMatrix-class 三角密集邏輯矩陣
- R Hilbert 生成希爾伯特矩陣
- R nearPD 最近正定矩陣
- R lsyMatrix-class 對稱密集邏輯矩陣
- R CHMfactor-class 稀疏 Cholesky 分解
- R dgCMatrix-class 壓縮、稀疏、麵向列的數值矩陣
- R Cholesky-methods Cholesky 分解方法
- R Subassign-methods “[<-”的方法 - 分配給“矩陣”的子集
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 General Sparse Matrix Construction from Nonzero Entries。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。