NJm*_*key 2 optimization performance loops r
n<-100000
aa<-rnorm(n)
bb<-rnorm(n)
system.time(lapply(aa, function(z){mean(bb<pnorm(z))}))
Run Code Online (Sandbox Code Playgroud)
运行这个小代码需要很长时间.简单地说,我有两个向量aa和bb.对于每个元素aa,比方说aa[i],我想要的比例bb < aa[i]
我找到了这篇文章并尝试用它来加速.但它不起作用. sapply与复合函数的速度比较
任何帮助将不胜感激!
您可以使用该findInterval功能:
n <- 25000
aa <- rnorm(n)
bb <- rnorm(n)
system.time(q1 <- lapply(aa, function(z){mean(bb<pnorm(z))}))
# user system elapsed
# 20.057 2.544 22.807
system.time(q2 <- findInterval(pnorm(aa), sort(bb))/n)
# user system elapsed
# 0.020 0.000 0.021
all.equal(as.vector(q1, "numeric"), q2)
# [1] TRUE
Run Code Online (Sandbox Code Playgroud)
请注意findInterval返回索引,所以我将结果除以n.如果你可以pnorm(aa)在给它之前进行排序findInterval,它会更快.