我有以下数据:
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)
有什么想法吗?