sparseMatrix
我们可以用或由非零元素的索引和值构造一个稀疏矩阵spMatrix
。是否有任何函数将稀疏矩阵转换回所有非零元素的索引和值?例如
i <- c(1,3,5); j <- c(1,3,4); x <- 1:3
A <- sparseMatrix(i, j, x = x)
B <- sparseToVector(A)
## test case:
identical(B,cbind(i,j,x))
有什么功能可以做类似的工作sparseToVector
吗?
sparseMatrix
我们可以用或由非零元素的索引和值构造一个稀疏矩阵spMatrix
。是否有任何函数将稀疏矩阵转换回所有非零元素的索引和值?例如
i <- c(1,3,5); j <- c(1,3,4); x <- 1:3
A <- sparseMatrix(i, j, x = x)
B <- sparseToVector(A)
## test case:
identical(B,cbind(i,j,x))
有什么功能可以做类似的工作sparseToVector
吗?
您的矩阵A
采用稀疏压缩格式(类dgCMatrix
)。您可以通过以下方式将其强制转换为非压缩稀疏格式
A.nc <- as (A, "dgTMatrix")
或者,您可以giveCsparse = TRUE
在sparseMatrix
通话中指定。
三元组形式dgTMatrix
基本上包含您在 slot i
、j
和中查找的所有内容x
,i
并且j
索引是使用基于 0 的偏移量完成的:
> str (A.nc)
Formal class 'dgTMatrix' [package "Matrix"] with 6 slots
..@ i : int [1:3] 0 2 4
..@ j : int [1:3] 0 2 3
..@ Dim : int [1:2] 5 4
..@ Dimnames:List of 2
.. ..$ : NULL
.. ..$ : NULL
..@ x : num [1:3] 1 2 3
..@ factors : list()
> cbind (i = A.nc@i + 1, j = A.nc@j + 1, x = A.nc@x)
i j x
[1,] 1 1 1
[2,] 3 3 2
[3,] 5 4 3
> all (cbind (i = A.nc@i + 1, j = A.nc@j + 1, x = A.nc@x) == cbind (i, j, x))
[1] TRUE
summary(A)
# 5 x 4 sparse Matrix of class "dgCMatrix", with 3 entries
# i j x
# 1 1 1 1
# 2 3 3 2
# 3 5 4 3
您可以轻松地将其传递给as.data.frame
or as.matrix
:
sparseToVector <- function(x)as.matrix(summary(x))
B <- sparseToVector(A)
## test case:
identical(B,cbind(i,j,x))
# [1] TRUE
which
与 一起使用arr.ind
:
idx <- which(A != 0, arr.ind=TRUE)
cbind(idx, A[idx])
# [,1] [,2] [,3]
# [1,] 1 1 1
# [2,] 3 3 2
# [3,] 5 4 3