Как избежать трех петель
У меня есть следующие данные:
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)
Есть идеи?