在 R 中合并两个不同大小的 dgCMatrix 稀疏矩阵
Merge two dgCMatrix sparse matrices of different size in R
如何在 R 中合并两个大的(大约 500k 列和行)稀疏矩阵 class dgCMatrix
具有不同的大小(列和行方面)?
简单示例:我有一个完整的 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
和合并,但两者都不起作用:
only matrices and data.frames can be used
或
cannot coerce class "*structure("dgCMatrix", package = "Matrix")" to a data.frame.
但是,我无法将我的矩阵更改为 sparse=FALSE
矩阵 class,如此处建议的 in this post 或 data.frame,因为在这种情况下,R 无法处理我机器上的矩阵大小了。
如有任何帮助,我们将不胜感激。谢谢!
一种策略是将矩阵转换回相同的大小,然后将它们相加。
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
如何在 R 中合并两个大的(大约 500k 列和行)稀疏矩阵 class dgCMatrix
具有不同的大小(列和行方面)?
简单示例:我有一个完整的 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
和合并,但两者都不起作用:
only matrices and data.frames can be used
或
cannot coerce class "*structure("dgCMatrix", package = "Matrix")" to a data.frame.
但是,我无法将我的矩阵更改为 sparse=FALSE
矩阵 class,如此处建议的 in this post 或 data.frame,因为在这种情况下,R 无法处理我机器上的矩阵大小了。
如有任何帮助,我们将不胜感激。谢谢!
一种策略是将矩阵转换回相同的大小,然后将它们相加。
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