2013-04-06 5 views
11

sparseMatrix 또는 spMatrix을 사용하여 0이 아닌 요소의 인덱스와 값으로 희소 행렬을 구성 할 수 있습니다. 스파 스 매트릭스를 인덱스가 아닌 모든 0이 아닌 요소로 다시 변환하는 함수가 있습니까? 예 :희소 행렬을 인덱스 행렬과 비제로 요소 값으로 변환하는 방법

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과 유사한 작업을 수행하는 기능이 있습니까? arr.ind

답변

5
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 또는 as.matrix으로 쉽게 전송할 수 있습니다.


sparseToVector <- function(x)as.matrix(summary(x)) 
B <- sparseToVector(A) 
## test case: 
identical(B,cbind(i,j,x)) 
# [1] TRUE 
2

사용 which :

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 
7

귀하의 매트릭스 A는 스파 스 압축 형식 (클래스 dgCMatrix)입니다. 당신은 당신이 sparseMatrix 호출에 giveCsparse = TRUE을 지정한 수

A.nc <- as (A, "dgTMatrix") 

하여 비 압축 스파 스 형식으로 강요 또는 수 있습니다. dgTMatrix의 삼중 형태는 기본적으로 슬롯 i, j에서 찾고있는 모두 포함

x은 단지 ij 인덱스는 0으로부터 오프셋 (offset)로 수행됩니다

> str (A.nc) 
Formal class 'dgTMatrix' [package "Matrix"] with 6 slots 
    [email protected] i  : int [1:3] 0 2 4 
    [email protected] j  : int [1:3] 0 2 3 
    [email protected] Dim  : int [1:2] 5 4 
    [email protected] Dimnames:List of 2 
    .. ..$ : NULL 
    .. ..$ : NULL 
    [email protected] x  : num [1:3] 1 2 3 
    [email protected] factors : list() 

> cbind (i = [email protected] + 1, j = [email protected] + 1, x = [email protected]) 
    i j x 
[1,] 1 1 1 
[2,] 3 3 2 
[3,] 5 4 3 
> all (cbind (i = [email protected] + 1, j = [email protected] + 1, x = [email protected]) == cbind (i, j, x)) 
[1] TRUE 
+0

@flodel : 음 ... OK ... 설득. – cbeleites

+0

'giveCsparse = FALSE'를 의미하지 않습니까? –

관련 문제