2013-04-06 13 views
11

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と同じような仕事をしていますか? 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)です。あなたは

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

それとも、あなたはsparseMatrix呼び出しでgiveCsparse = TRUEを指定している可能性により、非圧縮スパースフォーマットにそれを強制することができます。 dgTMatrixのトリプレット形式は基本的にあなたがスロットijで探しているすべて含まれてい

、およびxは、ちょうどijインデックスは0ベースのオフセットで行われます。

> 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'を意味していませんか? –

関連する問題