【问题标题】:Assign "sparse" values to the diagonal of a sparse Matrix in R将“稀疏”值分配给 R 中稀疏矩阵的对角线
【发布时间】:2016-12-15 12:20:20
【问题描述】:

我想将空值或稀疏值分配给 R 中的稀疏矩阵。具体来说,我想从 Matrix 包中删除稀疏矩阵对角线中的所有值。 我目前只能将非稀疏 0 分配到对角线中,然后使用 drop0 函数将它们删除。

有没有办法将空值直接赋给稀疏矩阵的对角线?

下面的代码演示了这个问题:

    library(Matrix)
    m       <- Diagonal(10) 
    diag(m) <- 0
    m
    drop0(m)

我想跳过 drop0(m) 步骤。 在我的实际分析中,我想保留非对角线值用于网络分析,所以我对空矩阵并不感兴趣,而是一种将“稀疏”或“空”值分配给稀疏矩阵的方法。

【问题讨论】:

    标签: r matrix sparse-matrix


    【解决方案1】:

    我假设您确实有一个 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]
    

    【讨论】:

    • 感谢您的回答。我现在看到我的问题不清楚。在我目前的分析中,我不是在寻找一个空矩阵,而是一种去除具有非对角线值的稀疏矩阵的矩阵的方法 - 与我的示例不同。我编辑了我的问题。
    • 查看我的编辑,它显示了我所描述的内容。 (我不确定这是否比你一直在做的更快。做一些基准测试。)
    猜你喜欢
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 2018-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多