【发布时间】:2015-04-18 11:04:22
【问题描述】:
在 R 中,我尝试使用以下代码将多个单位矩阵行绑定到 1 个巨型矩阵中:
> X <- 4
> Y <- 3
> block1 <- diag(X)
> for(x in 2:Y) {
> block1 <- cbind(block1,diag(X))
> }
应该是这样的:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 1 0 0 0 1 0 0 0 1 0 0 0
[2,] 0 1 0 0 0 1 0 0 0 1 0 0
[3,] 0 0 1 0 0 0 1 0 0 0 1 0
[4,] 0 0 0 1 0 0 0 1 0 0 0 1
我觉得有一种更清洁且内存消耗更少的方法来执行此操作。事实是我的 X 是几千,Y 是 20 多岁,所以在不使用 for 循环中的这些替换的情况下“从头开始”生成矩阵将是首选,因为我遇到了内存阻塞。我尝试查看Matrix 包中的bdiag(),但该功能并不是我想要的。
那么有没有一个函数可以“从头开始”执行此操作?
编辑:
用户很友好地建议我研究“稀疏矩阵”。我遇到了SparseM 包,我 99% 都在那里。我只需使用as.matrix.csr 函数将我的矩阵转换为CSR 格式,再加上cbind.matrix.csr 和rbind.matrix.csr,我可以有效地获得我需要的所有矩阵。现在的问题是,当我尝试在线性规划求解器 (Rsymphony) 中使用它时,我必须使用 as.matrix() 将 CSR 矩阵转换回正常状态,但它仍然给我一个内存问题。
【问题讨论】:
-
你看过谷歌搜索结果中的“存储稀疏矩阵”吗?
标签: r for-loop memory matrix sparse-matrix