sparseVector-class
位於 Matrix
包(package)。 說明
稀疏向量類:虛擬母類 "sparseVector"
有五個實際子類 "dsparseVector"
、 "isparseVector"
、 "lsparseVector"
、 "nsparseVector"
和 "zsparseVector"
,其中我們主要實現了 d*
的方法、l*
和n*
。
插槽
length
:-
類
"numeric"
- 稀疏向量的length
。請注意,"numeric"
可以故意大於最大值"integer"
、.Machine$integer.max
。 i
:-
類
"numeric"
- 非零條目的(從 1 開始)索引。不能是NA
並且嚴格遞增排序。請注意,
"integer"
是 “part of”"numeric"
,並且可以(並且通常會)用於非大型稀疏向量。 x
:-
(對於除
"nsparseVector"
之外的所有內容):非零條目。這是類"numeric"
的類"dsparseVector"
,"logical"
的類"lsparseVector"
等。請注意,
"nsparseVector"
沒有x
插槽。此外,主要是為了便於方法定義,我們將具有x
槽的所有稀疏向量類的類並集(參見setClassUnion
)定義為類"xsparseVector"
。
方法
- 長度
-
signature(x = "sparseVector")
:簡單地提取length
槽。 - 展示
-
signature(object = "sparseVector")
:稀疏向量的show
方法使用非導出的prSpVector
函數將“structural”零打印為"."
,該函數允許進一步定製,例如用" "
(空白)替換"."
。請注意,
options(max.print)
將影響打印大型稀疏向量的條目數量。 - as.vector
-
signature(x = "sparseVector", mode = "character")
將稀疏向量強製為 “regular”,即原子向量。這與as(x, "vector")
相同。 - 作為
-
..:參見下麵的
coerce
- 強製
-
signature(from = "sparseVector", to = "sparseMatrix")
, 和 - 強製
-
signature(from = "sparseMatrix", to = "sparseVector")
等:對稀疏矩陣的強製轉換(sparseMatrix
)的提供和工作方式與標準類似R,即向量被強製轉換為 1 列矩陣。 - 暗淡<-
-
signature(x = "sparseVector", value = "integer")
將稀疏向量強製轉換為稀疏矩陣,即繼承自sparseMatrix
的適當維度的對象。 - 頭
-
signature(x = "sparseVector")
: 與R的(包util
)head
,head(x,n)
(為了 )相當於x[1:n]
,但這裏可以更有效,請參閱示例。 - 尾巴
-
signature(x = "sparseVector")
:類似於head
,見上文。 - 托普利茨
-
signature(x = "sparseVector")
:作為toeplitz(x)
,從x
生成 Toeplitz 矩陣,其中n = length(x)
。 - 代表
-
signature(x = "sparseVector")
重複x
,使用相同的參數列表(x, times, length.out, each, ...)
作為 rep() 的默認方法。 - 哪一個
-
signature(x = "nsparseVector")
和 - 哪一個
-
signature(x = "lsparseVector")
返回非零條目的索引(這對於稀疏向量來說很簡單)。 - 行動
-
signature(e1 = "sparseVector", e2 = "*")
:定義算術、比較和邏輯運算(參見Ops
)。 - 概括
-
signature(x = "sparseVector")
:定義所有Summary
方法。 - [
-
signature(x = "atomicVector", i = ...)
:您不僅可以使用稀疏向量i
對sparseVectorsx[i]
進行子集化(又名“index into”),而且我們還支持通過邏輯稀疏向量對傳統向量x
進行高效子集化。 (即類"nsparseVector"
或"lsparseVector"
的i
)。 - is.na,is.finite,is.infinite
-
(x = "sparseVector")
和 - is.na,is.finite,is.infinite
-
(x = "nsparseVector")
: 返回logical
或者"nsparseVector"
與相同長度x
,表示是否/何處x
是NA
(或者NaN
),有限或無限,完全類似於相應的基數R職能。
c.sparseVector()
是適用於所有的 S3 方法"sparseVector"
s,但自動分派僅發生在第一個參數上,因此它也可以像常規一樣有用R函數,請參閱示例。
例子
getClass("sparseVector")
getClass("dsparseVector")
getClass("xsparseVector")# those with an 'x' slot
sx <- c(0,0,3, 3.2, 0,0,0,-3:1,0,0,2,0,0,5,0,0)
(ss <- as(sx, "sparseVector"))
ix <- as.integer(round(sx))
(is <- as(ix, "sparseVector")) ## an "isparseVector" (!)
(ns <- sparseVector(i= c(7, 3, 2), length = 10)) # "nsparseVector"
## rep() works too:
(ri <- rep(is, length.out= 25))
## Using `dim<-` as in base R :
r <- ss
dim(r) <- c(4,5) # becomes a sparse Matrix:
r
## or coercion (as as.matrix() in base R):
as(ss, "Matrix")
stopifnot(all(ss == print(as(ss, "CsparseMatrix"))))
## currently has "non-structural" FALSE -- printing as ":"
(lis <- is & FALSE)
(nn <- is[is == 0]) # all "structural" FALSE
## NA-case
sN <- sx; sN[4] <- NA
(svN <- as(sN, "sparseVector"))
v <- as(c(0,0,3, 3.2, rep(0,9),-3,0,-1, rep(0,20),5,0),
"sparseVector")
v <- rep(rep(v, 50), 5000)
set.seed(1); v[sample(v@i, 1e6)] <- 0
str(v)
system.time(for(i in 1:4) hv <- head(v, 1e6))
## user system elapsed
## 0.033 0.000 0.032
system.time(for(i in 1:4) h2 <- v[1:1e6])
## user system elapsed
## 1.317 0.000 1.319
stopifnot(identical(hv, h2),
identical(is | FALSE, is != 0),
validObject(svN), validObject(lis), as.logical(is.na(svN[4])),
identical(is^2 > 0, is & TRUE),
all(!lis), !any(lis), length(nn@i) == 0, !any(nn), all(!nn),
sum(lis) == 0, !prod(lis), range(lis) == c(0,0))
## create and use the t(.) method:
t(x20 <- sparseVector(c(9,3:1), i=c(1:2,4,7), length=20))
(T20 <- toeplitz(x20))
stopifnot(is(T20, "symmetricMatrix"), is(T20, "sparseMatrix"),
identical(unname(as.matrix(T20)),
toeplitz(as.vector(x20))))
## c() method for "sparseVector" - also available as regular function
(c1 <- c(x20, 0,0,0, -10*x20))
(c2 <- c(ns, is, FALSE))
(c3 <- c(ns, !ns, TRUE, NA, FALSE))
(c4 <- c(ns, rev(ns)))
## here, c() would produce a list {not dispatching to c.sparseVector()}
(c5 <- c.sparseVector(0,0, x20))
## checking (consistency)
.v <- as.vector
.s <- function(v) as(v, "sparseVector")
stopifnot(
all.equal(c1, .s(c(.v(x20), 0,0,0, -10*.v(x20))), tol=0),
all.equal(c2, .s(c(.v(ns), .v(is), FALSE)), tol=0),
all.equal(c3, .s(c(.v(ns), !.v(ns), TRUE, NA, FALSE)), tol=0),
all.equal(c4, .s(c(.v(ns), rev(.v(ns)))), tol=0),
all.equal(c5, .s(c(0,0, .v(x20))), tol=0)
)
也可以看看
sparseVector()
用於稀疏向量的友好構造(as(*, "sparseVector")
除外)。
相關用法
- R sparseVector 從非零條目構造稀疏向量
- R sparseMatrix 從非零項構建一般稀疏矩陣
- R sparseQR-class 稀疏 QR 分解
- R sparse.model.matrix 構造稀疏設計/模型矩陣
- R sparseMatrix-class 虛擬類“sparseMatrix”——稀疏矩陣之母
- R sparseLU-class 稀疏 LU 分解
- 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大神的英文原創作品 Sparse Vector Classes。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。