Как сделать этот цикл быстрее - PullRequest
0 голосов
/ 17 апреля 2019

на этот цикл уходит около часа. Есть ли способ сделать это быстрее?

l <- 2

while (l < 300001) {
  VV[1,l] = log(b+(l-1) * 0.001-0.0005) + k + 
    beta * (1-delta) * (1-p * sum(Pr[1,(1:l)])) * V[1, l] + 
    beta  *(1-delta) * p * sum((V[1,] * Pr[1,])[(l+1):300001])
  l = l + 1
}

1 Ответ

0 голосов
/ 17 апреля 2019

Если на * nix (Linux, Unix, macOS, ...) вы можете использовать parallel обработка:

library(parallel)

VV <- matrix(ncol = 300001)
mclapply(2:300001, function(l){
  VV[1,l] <<- log(b+(l-1) * 0.001-0.0005) + k + beta * (1-delta) * (1-p * sum(Pr[1,(1:l)])) * V[1,l]+beta  *(1-delta) * p * sum((V[1,] * Pr[1,])[(l+1):300001])
  }, mc.cores = 5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...