当我处理庞大的数据集时,我收到的数据已经很稀疏了。我以常规方式加载它,我的矩阵“smskin”属于此类:
Formal class 'dsCMatrix' [package "Matrix"] with 7 slots
..@ i : int [1:57263] 0 1 2 3 4 5 6 7 8 9 ...
..@ p : int [1:26018] 0 1 2 3 4 5 6 7 8 9 ...
..@ Dim : int [1:2] 26017 26017
..@ Dimnames:List of 2
.. ..$ : NULL
.. ..$ : NULL
..@ x : num [1:57263] 0 0 0 0 0 0 0 0 0 0 ...
..@ uplo : chr "U"
..@ factors : list()
我的矩阵是 26000x26000,所有对角线值都是 1,尽管我想去掉它们以节省一些额外空间。我这样做 诊断(smskin)= 0 现在,为了节省更多空间,我想将那些零值转换为 .位置稀疏。 所以我做 new.smskin = 矩阵(smskin,sparse=TRUE) 然而,当我查看对角线的输出时,结果是
10 x 10 sparse Matrix of class "dgCMatrix"
[1,] 0 . . . . . . . . .
[2,] . 0 . . . . . . . .
[3,] . . 0 . . . . . . .
[4,] . . . 0 . . . . . .
[5,] . . . . 0 . . . . .
[6,] . . . . . 0 . . . .
[7,] . . . . . . 0 . . .
[8,] . . . . . . . 0 . .
[9,] . . . . . . . . 0 .
[10,] . . . . . . . . . 0
看来 0 值不被接受为稀疏值。 我不确定我需要做什么,但我真的需要这条对角线也是稀疏的。
最好的, Z
最佳答案
目前还不清楚为什么有时会发生这种情况。但是,Matrix
包中提供了一个函数来修复它:drop0
。
smskin<-drop0(smskin)
关于r - 初始稀疏矩阵不会将新的零值变成稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25040241/