Я всегда был немного обеспокоен отсутствием точности. Я вижу табличку с маркировкой system.time
и rbenchmark
(в том, что точность синхронизации может отсутствовать), и недавно увидел Hadley ссылку на пакет microbenchmark
. Поэтому я решил дать ему вихрь, как показано ниже. Я провел mean
против f <- function(x) {sum(x)/length(x)}
и ожидал mean
, чтобы сделать способ лучше, чем f
, но результаты, как я их понимаю, не указывают, что это правда.неожиданные результаты: microbenchmark
- Я не понимаю результаты?
- Действительно ли это быстрее, чем означает?
- Микробиблиотека все еще находится в бета-фазе, и ее нужно гладить ?
Я запускаю R2.15 на машине с выигрышем 7 (так как микробиблиотека выполняет тайминги по-разному в зависимости от вашей ОС).
Результаты
Unit: microseconds
expr min lq median uq max
1 f(x) 19.130 20.529 20.529 20.996 286.00
2 mean(x) 28.927 29.860 30.327 30.327 672.31
Кодекс
library(microbenchmark)
x <- 1:10000
f <- function(x) {sum(x)/length(x)}
mean(x)
res <- microbenchmark(
mean(x),
f(x),
times=1000L)
print(res)
boxplot(res)
Мне нравится 'microbenchmark'. Если вы делаете больше одного или двух результатов, построение графика может помочь, но выход по умолчанию немного на уродливой стороне. Я написал функцию автопрота для ggplot2, которая может отображаться в одном из этих релизов (пока не проверяйте github). Примеры: http://stackoverflow.com/a/6919493/636656 –
Это может быть объяснено http://radfordneal.wordpress.com/2014/02/02/inaccurate-results-from-microbenchmark/ – Momo
Возможно, не все данные для 'f' были ниже, и диаграмма рассеяния также указала это. Джоран прибил это. –