将 "sparse" 值分配给 R 中稀疏矩阵的对角线
Assign "sparse" values to the diagonal of a sparse Matrix in R
我想将空值或稀疏值分配给 R 中的稀疏矩阵。具体来说,我想从 Matrix 包中删除稀疏矩阵对角线上的所有值。
我目前只能将非稀疏 0 分配到对角线上,然后使用 drop0 函数删除它们。
有没有办法将空值直接赋给稀疏矩阵的对角线?
下面的代码演示了这个问题:
library(Matrix)
m <- Diagonal(10)
diag(m) <- 0
m
drop0(m)
我想跳过 drop0(m) 步骤。
在我的实际分析中,我有非对角线值,我想保留这些值用于网络分析,所以我对空矩阵并不感兴趣,而是一种将 "sparse" 或 "empty" 值分配给稀疏矩阵的方法矩阵.
我假设你确实有一个 class ddiMatrix
的矩阵并且想要创建一个空矩阵:
m1 <- as(m, "generalMatrix")
m1@i <- integer(0)
m1@p <- m1@p * 0L
m1@x <- numeric(0)
#10 x 10 sparse Matrix of class "dgCMatrix"
#
# [1,] . . . . . . . . . .
# [2,] . . . . . . . . . .
# [3,] . . . . . . . . . .
# [4,] . . . . . . . . . .
# [5,] . . . . . . . . . .
# [6,] . . . . . . . . . .
# [7,] . . . . . . . . . .
# [8,] . . . . . . . . . .
# [9,] . . . . . . . . . .
#[10,] . . . . . . . . . .
当然,你也可以简单地构造一个新的这些维度的空稀疏矩阵。
如果 CsparseMatrix
具有非对角线值,将其强制转换为 TsparseMatrix
并删除所有 i
、j
、x
值其中 i == j (或跳过强制并从 i
和 p
计算正确的索引,我觉得这很困难)。
m1 <- as(m, "generalMatrix")
m2 <- as(m1, "TsparseMatrix")
del <- m2@i == m2@j
m2@i <- m2@i[!del]
m2@j <- m2@j[!del]
m2@x <- m2@x[!del]
我想将空值或稀疏值分配给 R 中的稀疏矩阵。具体来说,我想从 Matrix 包中删除稀疏矩阵对角线上的所有值。 我目前只能将非稀疏 0 分配到对角线上,然后使用 drop0 函数删除它们。
有没有办法将空值直接赋给稀疏矩阵的对角线?
下面的代码演示了这个问题:
library(Matrix)
m <- Diagonal(10)
diag(m) <- 0
m
drop0(m)
我想跳过 drop0(m) 步骤。 在我的实际分析中,我有非对角线值,我想保留这些值用于网络分析,所以我对空矩阵并不感兴趣,而是一种将 "sparse" 或 "empty" 值分配给稀疏矩阵的方法矩阵.
我假设你确实有一个 class ddiMatrix
的矩阵并且想要创建一个空矩阵:
m1 <- as(m, "generalMatrix")
m1@i <- integer(0)
m1@p <- m1@p * 0L
m1@x <- numeric(0)
#10 x 10 sparse Matrix of class "dgCMatrix"
#
# [1,] . . . . . . . . . .
# [2,] . . . . . . . . . .
# [3,] . . . . . . . . . .
# [4,] . . . . . . . . . .
# [5,] . . . . . . . . . .
# [6,] . . . . . . . . . .
# [7,] . . . . . . . . . .
# [8,] . . . . . . . . . .
# [9,] . . . . . . . . . .
#[10,] . . . . . . . . . .
当然,你也可以简单地构造一个新的这些维度的空稀疏矩阵。
如果 CsparseMatrix
具有非对角线值,将其强制转换为 TsparseMatrix
并删除所有 i
、j
、x
值其中 i == j (或跳过强制并从 i
和 p
计算正确的索引,我觉得这很困难)。
m1 <- as(m, "generalMatrix")
m2 <- as(m1, "TsparseMatrix")
del <- m2@i == m2@j
m2@i <- m2@i[!del]
m2@j <- m2@j[!del]
m2@x <- m2@x[!del]