【问题标题】:Merge two dgCMatrix sparse matrices of different size in R在R中合并两个不同大小的dgCMatrix稀疏矩阵
【发布时间】:2015-10-27 22:25:19
【问题描述】:

如何在 R 中合并两个具有不同大小(列和行)的正式类 dgCMatrix 的大型(大约 500k 列和行)稀疏矩阵?

简化示例:我有一个完整的 6x6 矩阵

1 2 3 4 5 6
1 0 0 0 0 0 0
2 0 0 0 0 0 0
3 0 0 0 0 0 0
4 0 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0

现在我想合并第二个不同大小的矩阵:

3 4 5 6
1 0 1 0 0 
3 0 0 1 0 
4 1 0 0 0 

结果应该是:

1 2 3 4 5 6
1 0 0 0 1 0 0
2 0 0 0 0 0 0
3 0 0 0 0 1 0
4 1 0 0 0 0 0
5 0 0 0 0 0 0
6 0 0 0 0 0 0

我尝试了cbindX 并合并,但两者都不起作用:

只能使用矩阵和data.frames

不能将类 "*structure("dgCMatrix", package = "Matrix")" 强制转换为 data.frame。

但是,我无法将我的矩阵更改为 sparse=FALSE 矩阵类,如此处建议的 in this post 或 data.frame,因为在这种情况下,R 无法再处理我机器上的矩阵大小。

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: r matrix merge sparse-matrix


    【解决方案1】:

    一种策略是将矩阵转换回相同的大小,然后添加它们。

    A <- sparseMatrix(8, 8, x = 1)
    B <- sparseMatrix(c(1,3,5), c(3,6,3), x = c(1,4,1))
    

    您可以使用 summary(B) 访问矩阵 B 的索引,然后使用 sparseMatrix(i,j,x,dims) 重新创建矩阵,就像在 R 中进行正常的子集操作一样:

    > summary(B)
    5 x 6 sparse Matrix of class "dgCMatrix", with 3 entries 
      i j x
    1 1 3 1
    2 5 3 1
    3 3 6 4
    
    B <- sparseMatrix(i = summary(B)$i, j = summary(B)$j, x = summary(B)$x, dims = dim(A))
    

    然后你可以添加矩阵:

    A = A + B
    

    【讨论】:

    • 好主意 - 效果很好,非常感谢!我还没有足够的积分,所以无法投票给你。
    猜你喜欢
    • 2017-10-03
    • 2020-04-20
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2018-02-15
    • 2021-09-22
    相关资源
    最近更新 更多