Изменения

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

R:Оптимизация/Предварительное выделение памяти

1986 байтов добавлено, 12:53, 13 апреля 2014
Новая страница: «== Предварительное выделение памяти == Частой задачей, решаемой с помощью циклов, являетс…»
== Предварительное выделение памяти ==

Частой задачей, решаемой с помощью циклов, является выполнение расчётов и занесение результатов в переменную. Таким образом, результирующая переменная будет заполняться данными по мере работы цикла. Предварительное выделение памяти (preallocate) позволяет ускорить работу циклов, работающих с постепенной заполняемыми данными. Суть данного метода заключается в том, чтобы заранее выделить место в оперативной памяти, в которую будут записываться данные во время работы цикла. Выделение памяти осуществляется путём указания типа и размера переменной. Если этого не сделать, то при каждой новой итерации необходимо выделять новое место в памяти и производить туда запись.

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

{{r-code|code=<nowiki>> noaaloc <- function(n) {
+ x <- NULL
+ for (i in seq_len(n))
+ x[i] <- i * i
+ x
+ }
>
> alloc <- function(n) {
+ x <- integer(n)
+ for (i in seq_len(n))
+ x[i] <- i * i
+ x
+ }
> microbenchmark(noaaloc(10^4), alloc(10^4))
Unit: milliseconds
expr min lq median uq max neval
noaaloc(10^4) 41.746 42.719 43.353 44.603 76.31 100
alloc(10^4) 5.524 5.896 6.019 6.777 27.35 100</nowiki>}}

Навигация