Ускорение для цикла в R - PullRequest
       7

Ускорение для цикла в R

3 голосов
/ 26 февраля 2012

Я собираюсь запустить этот цикл for, но для его выполнения требуется недопустимо много времени (~ 20 с). x и y - предопределенные векторы длины 2000000.

for(i in 1:2000000)
{
    a <- runif(1)
    b <- runif(1)
    sqrtf <- sqrt(-log(b,10))

    x[i] <- sqrtf*cos(a)
    y[i] <- sqrtf*cos(b)
}

Есть ли какие-нибудь хитрости, чтобы немного ускорить это?

РЕДАКТИРОВАТЬ: исправлено sqrtf

Ответы [ 3 ]

5 голосов
/ 26 февраля 2012
n <- 2e6
set.seed(101)
a <- runif(n)
b <- runif(n)
sqrtf <- sqrt(-log10(b))
x <- sqrtf*cos(a)
y <- sqrtf*cos(b)
3 голосов
/ 26 февраля 2012
# just so you don't have to write 2000000 over and over
n <- 2e6
# so the results are replicable
set.seed(0)
# the meat and potatoes... this is "vectorized" code that you'll hear lots about
# as you study R
a <- runif(n)
b <- runif(n)
sqrtf <- sqrt( -log10(b) )
x <- sqrtf * cos(a)
y <- sqrtf * cos(b)
1 голос
/ 26 февраля 2012

x <- sqrtexp*cos(runif(2e6))

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