R 更有效的有界累积和
我有一个R代码,它需要很多时间来执行。如何修改此代码以使其运行更快、更高效?执行过程需要12分钟以上R 更有效的有界累积和,r,optimization,R,Optimization,我有一个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.5的样本的有界累
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.5的样本的有界累积和,因此,你的累积值永远不会小于0。有界累积金额已在这方面得到解决,我建议使用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))))
库(Rcpp)
bounded.cumsum矩阵的每一行都是正态分布减去0.5的样本的有界累积和,因此,你的累积值永远不会小于0。有界累积金额已在这方面得到解决,我建议使用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))))
库(Rcpp)
有界的,有界的,有界的,有界的,有界的,有界的,有界的,有界的。