快速大矩阵生成

时间:2014-07-09 15:04:35

标签: r performance matrix

我想生成一个大矩阵mat = matrix(, nrow=1e6, ncol=1e4)mat的值被指定为mat[,1] = 1:1e6。对于列cols in 2:1e4mat[,cols] = mat[,1] + shift[cols],其中shift是数字向量,例如shift = runif( 1e4 )

有很多方法可以做到这一点。问题在于,这是另一个功能的常用部分。如果这部分效率低下,计算时间将大大增加。任何人都有如何实现这一目标的好建议?

1 个答案:

答案 0 :(得分:0)

这个怎么样:

frist<-1:10
addto<-runif(5)
outer(frist,addto,'+')

现在是时间试验:

frist<-1:1e5
addto<-runif(1e3)

carl<-function(frist,addto)  outer(frist,addto,'+')

konvas<-function(frist,addto) {
fristmat<-matrix(rep(frist,times=length(addto)),nr=length(frist))
sweep(fristmat, 2, addto, '+') 
}

microbenchmark(carl(frist,addto),konvas(frist,addto),times=5)
Unit: seconds
                 expr      min       lq   median      uq
   carl(frist, addto) 1.046612 1.052813 1.053038 1.05717
 konvas(frist, addto) 7.265776 7.302062 7.328859 7.35135
      max neval
 1.344122     5
 7.366162     5