Как избежать трех петель - PullRequest
0 голосов
/ 19 октября 2018

У меня есть следующие данные:

C <- matrix(c(1, 1, 1,
              1, 1, 1,
              1, 0, 1), ncol = 3, byrow=  T)

n <- ncol(C)

iter <- 20

Gn <- matrix(nrow = iter, ncol = n)
Gn[1, ] <- rep(1 / n, n)

nCn <- matrix(nrow = iter, ncol = n)

И это моя реализация:

for (i in 2:iter) {

  for (j in 1:n) {
    nCn[i, j] <- sum(C[j,] / Gn[i - 1, ])
  }

  nCn[i, ] <- nCn[i, ] * sum(1 / nCn[i, ])

  for (k in 1:n) {
    Gn[i, k] <- sum(C[k,] / nCn[i, ])
  }

  Gn[i, n] <- Gn[i, n - 1]
}  

Я пытаюсь использовать mapply или другую эффективную форму, чтобы избежать тех (медленно) петли.Я безуспешно пробовал следующее:

nCn <- matrix(unlist(mapply(FUN = function(i, j){
  nCn[i, j] <- sum(C[j, ] / Gn[i - 1, ])
  nCn[i, ] <- nCn[i, ] * sum(1 / nCn[i, ])
  Gn[i, j] <- sum(C[j, ] / nCn[i, ])
  },
  2:N.iter, 1:n)), nrow = n, ncol = n, byrow = TRUE)

Есть идеи?

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