我正在使用Lagrange Multiplier方法研究约束优化问题。我正在尝试在R中构建这个巨大的稀疏矩阵以计算值。
这是矩阵的样子。如果需要,可以在下面链接查看问题的详细信息。
Implementation of Lagrange Multiplier to solve constrained optimization problem.
这是我提出的代码,对不起,如果我的方法对你来说很笨拙,因为我是矩阵操作和编程的新手。
首先,我从csv文件导入3154 x 30矩阵,然后将所有列合并为一个。然后我创建了一个对角矩阵来模仿矩阵的左上角。
然后,模仿矩阵的左下角。我创建了一个3154x3154标识矩阵并试图复制它30次。
我这里有两个问题
当我尝试cbind对角稀疏矩阵时,它返回了两个列表而不是矩阵的组合。所以我不得不把它转换成矩阵,但这太占用了我的记忆。我想知道是否有更好的方法来实现这一目标。
我想知道是否有多次cbind矩阵的公式。因为我需要复制矩阵30次。我很好奇是否有更清洁的方式来解决所有的打字。 (感谢@Jthorpe解决了这个问题)
我会为其余的矩阵做同样的事情。我知道这不是解决这个问题的最佳方法。请随时建议任何更聪明的方法。谢谢!
library(Matrix)
dist_data=read.csv("/Users/xxxxx/dist_mat.csv", header=T)
c=ncol(dist_data) #number of cluster - 30
n=nrow(dist_data) #number of observations - 3153
#Create a c*n+c+n = 3153*30+3153+3 = 97,773 coefficient matrix
dist_list=cbind(unlist(dist_data))
Coeff_mat=2*.sparseDiagonal(c*n,x = c(dist_list))
diag=.sparseDiagonal(n)
Uin <- do.call(cbind,rep(list(as.matrix(diag)),30))