我希望减少时间和内存使用(I以前使用外此,但它消耗更多的内存比我)通过减少迭代以创建一个对称矩阵,即sol[i, j]
相同sol[j, i]
。For循环创建对称矩阵
到目前为止我的代码:
# Prepare input
subss <- list(a = c(1, 2, 4), b = c(1, 2, 3), c = c(4, 5))
A <- matrix(runif(25), ncol = 5, nrow = 5)
# Pre allocate memory
sol <- matrix(nrow = length(subss), ncol = length(subss),
dimnames = list(names(subss), names(subss)))
x <- 0
for (i in seq_along(subss)) {
# Omit for the subsets I already calculated ?
for (j in seq_along(subss)) {
x <- x + 1
message(x)
# The function I use here might result in a NA
sol[i, j] <- mean(A[subss[[i]], subss[[j]]])
sol[j, i] <- sol[i, j] # Will overwrite when it shouldn't
}
}
将使用9次迭代,如何避免他们做到这6次迭代?
我需要计算对称值,因此this question不适用。此other one也不工作,因为可能有很多组合,并且在某些时候它不能在内存中分配矢量。
不行,首先它不会用我的subss,所以你提出什么尺寸为5×5不3x3的,第二我真正的函数,而不是意味着更复杂的 – Llopis