【发布时间】:2020-05-11 05:49:24
【问题描述】:
更新:
正如@Dave2e 所指出的,将start_time 语句(在代码2 中)移出for 循环将使运行时间与代码1 相当。即:
start_time <- Sys.time()
for (j in 1:1) {
n <- 100
result <- 1
for (i in 1:n) {
result <- result * i
}
result
## [1] 9.332622e+157
end_time <- Sys.time()
}
end_time - start_time
for 循环是真的提高了性能还是假的?
原帖:
我有两段代码如下:
代码1:
start_time <- Sys.time()
n <- 100
result <- 1
for (i in 1:n) {
result <- result * i
}
result
## [1] 9.332622e+157
end_time <- Sys.time()
end_time - start_time
代码2:
for (j in 1:1) {
start_time <- Sys.time()
n <- 100
result <- 1
for (i in 1:n){
result <- result * i}
result
## [1] 9.332622e+157
end_time <- Sys.time()
}
end_time - start_time
我原以为这两个代码运行相似,但代码 2 的运行速度始终比代码 1 快得多。在我的计算机上,代码 1 大约需要 10^-2 秒,而代码 2 大约需要 5*10^-6 秒。关于如何发生这种情况的任何见解?如果只是在整个代码中添加for循环可以减少程序运行时间,我会在我的所有代码中使用它。
【问题讨论】:
-
在代码 2 中将
start_time语句移到“for”循环之外,然后时间是可比较的。for语句必须在实际执行之前发送一个信号来预评估循环。对 R 有更深入了解的人可能会提供更好的答案。 -
“for 循环是真的提高了性能还是假的?” 让情况变得更糟!这是可以理解的,因为您正在运行一些额外的东西。
-
在做这件事之前,我的想法和你一模一样。但是上面例子中的运行时间让我很困惑,我不知道 R 的实现方式是否使用循环改变了它的运行方式,从而节省了某些计算的时间?
标签: r performance for-loop time