我有这个R代码需要花费大量时间来执行。如何更改此代码以使其运行更快,更高效?执行需要12分钟以上。
m=matrix(0,10000,10000)
for (j in 1:10000) {
for (i in 2:10000} {
x=rnorm(1,0,1)
m[j,i]=max(0,x-0.5+m[j,i-1])
}
}
meanC=apply(m,2,mean)[2:10000]
meanC
答案 0 :(得分:4)
矩阵的每一行都是正态分布的样本的有界累积和减去0.5,限制使得累积量永远不会小于0.有限累积和已在SO上解决before,并且我建议使用Rcpp包的方法:
library(Rcpp)
bounded.cumsum <- cppFunction(
"NumericVector cumsumBounded(NumericVector x, double low) {
NumericVector res(x.size());
double acc = 0;
for (int i=0; i < x.size(); ++i) {
acc += x[i];
if (acc < low) acc = low;
res[i] = acc;
}
return res;
}")
m <- t(sapply(1:10000, function(r) c(0, bounded.cumsum(rnorm(9999, 0, 1)-0.5, 0))))
在我的电脑上,这需要24秒,加速30倍。