대칭 행렬을 만들기 위해 반복을 줄임으로써 시간과 메모리 사용을 줄이고 싶습니다. (이전에는이 행을 사용했지만 메모리는 더 많이 소비했습니다) 즉 sol[i, j]
은 다음과 같습니다. sol[j, i]
. 지금까지대칭 행렬을 만드는 루프
내 코드 :
# 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은 여러 가지 조합이있을 수 있으며 어느 시점에서 벡터를 메모리에 할당 할 수 없기 때문에 작동하지 않습니다.
아니요, 처음에는 서브를 사용하지 않으므로 제안하는 차원은 3x3이 아니라 5x5입니다. 평균 대신 실제 함수가 더 복잡합니다 – Llopis