我想生成一个大矩阵mat = matrix(, nrow=1e6, ncol=1e4)
。 mat
的值被指定为mat[,1] = 1:1e6
。对于列cols in 2:1e4
,mat[,cols] = mat[,1] + shift[cols]
,其中shift
是数字向量,例如shift = runif( 1e4 )
。
有很多方法可以做到这一点。问题在于,这是另一个功能的常用部分。如果这部分效率低下,计算时间将大大增加。任何人都有如何实现这一目标的好建议?
答案 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