2012-04-06 2 views
2

У меня есть код, который я портировал из Matlab в R. Я хочу сравнить их производительность.R-исполнение кода с использованием: system time()

Однако у меня возникла проблема: использование system.time() в R, но я получаю разные результаты для одного и того же кода. Это должно произойти? Как мне это сравнить?

+2

Непосредственно, связанный с вашим вопросом, но всегда помните, что вы не просто сравниваете R vs Matlab, вы также сравниваете свою способность писать код, который максимально использует оба языка. – joran

+0

Спасибо, Джоран! Ценить это! –

ответ

6

Вы получите разные результаты, если у вас будет время запустить 100-метровый спринт! На компьютере много вещей, которые будут немного отличаться от времени, необходимого для запуска вашего кода.

Решение заключается в том, чтобы запускать код много раз. R-пакет benchmark - это то, что вы ищете.

+0

Спасибо! ;) Я думал, что это может быть такая ситуация, но в моей сети никто не знает R, поэтому они не могут объяснить цифры! –

0

Как @Justin сказал, времена всегда будут меняться. Особенно в первый раз пару раз, так как система сбора мусора не приспособилась к вашему конкретному использованию. Может быть хорошей идеей перезапустить R перед измерением (и закрыть другие программы, убедиться, что система не сканирует на вирусы в это время и т. Д.).

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

Пакеты benchmark или rbenchmark могут помочь.

... но я обычно просто делаю цикл вокруг проблемы и настраиваю его, пока он не займет секунду или около того, - и затем я запускаю его несколько раз.

Вот пример:

f <- function(x, y) { 
    sum <- 1 
    for (i in seq_along(x)) sum <- x[[i]] + y[[i]] * sum 
    sum 
} 

n <- 10000 
x <- 1:n + 0.5 
y <- -1:-n + 0.5 
system.time(f(x,y)) # 0.02-0.03 secs 

system.time(for(i in 1:100) f(x,y)) # 1.56-1.59 secs 

... так называть его в 100 раз уменьшить относительную погрешность много.

+0

Используемое время - это счетчики операционной системы для времени процесса. Это выборочные значения и, как правило, довольно точны. Но они могут давать очень неправильные результаты, если есть конкурирующий процесс, который управляется таймером только «неправильной» частоты (зависит от ОС, для OpenVms AXP - 10 мс). –

+0

Спасибо! Это помогает мне понять! –

Смежные вопросы