То же выражение, но в среднем занимает гораздо меньше времени в цикле - PullRequest
0 голосов
/ 24 марта 2019

Я пытался найти вычислительные затраты с помощью Sys.time (), начиная с нескольких простых операций.

Я начал с чего-то подобного

a=c(10,6,8,3,2,7,9,11,13)
t_beginning=Sys.time()
cl2=NULL
indx=which(a==7)
t_ending=Sys.time()
print(t_ending-t_beginning)

и это дает мне около 0,0023 сек после запуска кода в Rstudio.

Затем код помещается в цикл for для определения среднего расхода двух строк.

sum=0
a=c(10,6,8,3,2,7,9,11,13)

for (i in 1:5) {
  print(i)
  t_beginning=Sys.time()
  cl2=NULL
  indx=which(a==7)
  t_ending=Sys.time()
  sum=t_ending-t_beginning+sum
  print(t_ending-t_beginning)
}
sum/5

Оказывается, что для каждой итерации в цикле for потребление времени составляет всего несколько миллисекунд, что намного меньше, чем это было в цикле for.

[1] 1
Time difference of 7.152557e-06 secs
[1] 2
Time difference of 5.00679e-06 secs
[1] 3
Time difference of 4.053116e-06 secs
[1] 4
Time difference of 4.053116e-06 secs
[1] 5
Time difference of 5.00679e-06 secs

Я ожидаю, что средняя стоимость времени цикла for будет примерно такой же, как и без цикла, но они настолько разные. Не уверен, почему это происходит. Кто-нибудь может воспроизвести то же самое? Спасибо!

1 Ответ

0 голосов
/ 24 марта 2019

Разница заключается в том, как RStudio (или R) выполняет код.Исходный код выполняется построчно, поэтому получаемое время включает в себя интерфейс между RStudio и R.

a=c(10,6,8,3,2,7,9,11,13)
t_beginning=Sys.time()
cl2=NULL
indx=which(a==7)
t_ending=Sys.time()
print(t_ending-t_beginning)

# Time difference of 0.02099395 secs

Если, однако, вы запустите весь этот код сразу, заключив код в извилистые скобки,время, которое вы получите, резко улучшится:

{
    a=c(10,6,8,3,2,7,9,11,13)
    t_beginning=Sys.time()
    cl2=NULL
    indx=which(a==7)
    t_ending=Sys.time()
    print(t_ending-t_beginning)
}

# Time difference of 0 secs
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...