Изменения

Перейти к: навигация, поиск

R:Измерение времени выполнения выражений

5 байтов добавлено, 10:03, 23 января 2014
м
Нет описания правки
<syntaxhighlight lang="rsplus">
colMeanApply colMeansApply <- function(x) {
apply(x, 2, mean)
}
<syntaxhighlight lang="rsplus">
> identical(colMeanApplycolMeansApply(x), colMeansVapply(x), colMeansLoop(x), colMeansLoopVec(x), colMeans(x))
[1] TRUE
</syntaxhighlight>
<syntaxhighlight lang="rsplus">
> library(rbenchmark)
> benchmark(colMeanApplycolMeansApply(x), colMeansVapply(x), colMeansLoop(x),
+ colMeansLoopVec(x), colMeans(x), replications = 100)
test replications elapsed relative user.self sys.self user.child sys.child
1 colMeanApplycolMeansApply(x) 100 13.206 16.802 11.893 1.260 0 0
4 colMeansLoopVec(x) 100 6.931 8.818 6.793 0.113 0 0
3 colMeansLoop(x) 100 7.729 9.833 7.583 0.113 0 0
</syntaxhighlight>
Наиболее важны для нас в выводе функции {{Inline-code|benchmark()|lang="rsplus"}} столбцы elapsed и relative. Столбец elapsed показывает время, затраченное на выполнение интересующей нас функции. Как видим из примера, самыми медленными оказались функции {{Inline-code|colMeanApplycolMeansApply()|lang="rsplus"}} и {{Inline-code|colMeansLoop()|lang="rsplus"}}, а самой быстрой {{Inline-code|colMeans()|lang="rsplus"}}, причём превосходит остальные по скорости выполнения как минимум в 7 раз.
Показатель relative дает информацию о разнице во времени относительно самого быстрого выражения (в нашем случае это {{Inline-code|ColMeans()|lang="rsplus"}}), т.е. время самого быстрого выражения берётся за единицу, и рассчитывается относительное время для остальных выражений.
<syntaxhighlight lang="rsplus">
> benchmark(colMeanApplycolMeansApply(x), colMeansVapply(x), colMeansLoop(x), colMeansLoopVec(x), colMeans(x),
+ replications = 100, order = "relative",
+ columns = c("test", "replications", "elapsed", "relative"))
3 colMeansLoop(x) 100 7.684 9.826
2 colMeansVapply(x) 100 7.716 9.867
1 colMeanApply colMeansApply(x) 100 13.142 16.806
</syntaxhighlight>

Навигация