対称行列を作成するための反復回数を減らすことによって、時間とメモリの使用量を削減したい(以前はこれを外部に使用していましたが、それ以上のメモリを消費します)。つまり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