首页 文章

循环中哪个函数更有效(ncol / nrow()或dim())

提问于
浏览
3

在练习中,我尝试使用for循环创建乘法表 . 我是编程新手,R是我学习的第一语言,所以我想知道循环中哪些函数更快更有效 . 目前,我没有使用apply系列的方法,因为我认为理解循环等基本功能非常重要 .

以下是我用来创建multiplicaton表的两种方法:

使用 dim() 函数:

mtx <- matrix(nrow=10, ncol=10)

for(i in 1:dim(mtx)[1]){
  for(j in 1:dim(mtx)[2]){
    mtx[i,j] <- i*j
  }
}

使用 ncol / nrow() 函数:

mtx <- matrix(nrow=10, ncol=10)

for(i in 1:ncol(mtx)){
  for(j in 1:nrow(mtx)){
    mtx[i,j] <- i*j
  }
}

哪种方式更有效,通常更好用?

谢谢

1 回答

  • 3

    如果你像在你的例子中那样使用函数,那么差异实在是可以忽略不计 . 这是因为每个循环定义只调用一次函数(而不是每次循环迭代!)

    我肯定更喜欢 ncol / nrow ,因为它比 dim(x)[1] 更容易阅读 .

    话虽这么说,如果你只是为了时间, dim 函数比 ncol / nrow 更快 . 如果查看源代码,可以看到 ncol 实现为

    function (x) 
    dim(x)[2L]
    

    这意味着 ncol 调用 dim 因此稍慢 .

    如果你真的想用大矩阵保存一些速度,我建议事先创建循环向量,如下所示:

    rows <- 1:nrow(mtx)
    cols <- 1:ncols(mtx)
    for (i in rows) {
        for (j in cols) {
            mtx[i, j] <- i * j    
        }
    }
    

相关问题