更快地运行两个循环或一个循环

时间:2016-01-15 21:59:50

标签: r for-loop

通常,如果两个for循环的迭代次数相同,那么运行两个for循环或将两个for循环组合成一个for循环会更快吗?

我本以为运行一个for循环应该更快,但是当我写一些测试代码时,情况并非如此。任何人都可以解释为什么会这样吗?

以下是R

中的一些代码示例
tic <- function(gcFirst = TRUE, type=c("elapsed", "user.self", "sys.self"))
{
   type <- match.arg(type)
   assign(".type", type, envir=baseenv())
   if(gcFirst) gc(FALSE)
   tic <- proc.time()[type]         
   assign(".tic", tic, envir=baseenv())
   invisible(tic)
}

toc <- function()
{
   type <- get(".type", envir=baseenv())
   toc <- proc.time()[type]
   tic <- get(".tic", envir=baseenv())
   print(toc - tic)
   invisible(toc)
}

> tic() 
> for(i in 1:10000){
+ x = rnorm(1000)
+ y = rnorm(1000)
+ }
> toc()
elapsed 
   1.78 
> 
> 
> tic() 
> for(i in 1:10000){
+ x = rnorm(1000)
+ }
> for(i in 1:10000){
+ y = rnorm(1000)
+ }
> toc()
elapsed 
   1.78 

正如你所看到的那样,它需要一个for循环1.78秒,它也需要2个for循环1.78秒。

1 个答案:

答案 0 :(得分:0)

在两个循环示例中,第二个循环仅运行到1000.这可能是造成差异的原因。在一般情况下,回答很复杂,因为它取决于位置,缓存大小以及您正在进行哪些操作可以进行流水线操作。差异通常可以忽略不计,仅与性能关键应用相关。您应该优先考虑代码的清晰度。