1

この質問は他の質問と似ているように聞こえるかもしれませんが、調べてみると、探しているものとは少し異なります。以下に私のコードを示します。

Data <- rbind(c(54, 55, 51), c(52, 51, 57))
WMatrix <- rbind(c(0, 1), c(1, 0)) 

for(i in 1:2){
   for(j in 1:2){
      for(t in 1:2){
      print(WMatrix[i,j]*Data[j,t]*Data[i,t+1])
      }
   }
}

このコードの出力は、

[1] 0
[1] 0
[1] 2860
[1] 2601
[1] 2754
[1] 3135
[1] 0
[1] 0

ここで、この出力の合計をループからすぐに (リストせずに) 生成したいと考えています。つまり、ループの出力は 11350 である必要があります。これは、ループで生成されたすべての出力の合計です。この問題が非常に単純であることはわかっていますが、まだ基本的なプログラミングを学んでいます。私はこれを試しました、

for(i in 1:2){
   for(j in 1:2){
      for(t in 1:2){
      print(sum(WMatrix[i,j]*Data[j,t]*Data[i,t+1]))
      }
   }
}

しかし、出力は同じです。誰かがこれについて私を助けてくれますか?

ありがとう :)

4

2 に答える 2

8

少しの行列代数で、1 つのステップで完了します。

sum(WMatrix * (Data[, -3] %*% Data[, -1]))
[1] 11350

編集: R では、*演算子は要素ごとの乗算を実行し、while%*%は行列の積を返します。

于 2012-10-17T13:58:40.703 に答える
3

ここでは、これは完全に非効率的で、Cコードなどのように読み取れますが、必要なものを出力すると思います。ここで実際に何を達成しようとしているのか、これらの操作が何であるのかを知らずに、コードを最適化することはありません。

編集:はるかに優れた代替の答えを参照してください。@Andrieは実際にあなたがやりたいことを推測しました。

sum <- 0 
for(i in 1:2){
  for(j in 1:2){
    for(t in 1:2){
      sum <- sum + WMatrix[i,j]*Data[j,t]*Data[i,t+1]
    }
  }
}
print( sum )
于 2012-10-17T13:39:57.257 に答える