2

ABの2 つの 3 次元配列があり、それぞれ 2 x 3 x 3 です。以下に示す例 (どのように乗算したいかを明確にするのに役立ちます)。

 A1   A2   A3                             B1   B2   B3  
 A4   A5   A6                             B4   B5   B6

 A7   A8   A9                             B7   B8   B9
 A10  A11  A12                            B10  B11  B12

 A13  A14  A15                            B13  B14  B15
 A16  A17  A18                            B16  B17  B18

私がやりたいことは、3 つの A行列が平均化され、ある場所の値が対応するB値によって重み付けされる行列を作成することです...うまく説明できませんが、たとえば、最初の要素は次のとおりです。

[(A1*B1)+(A7*B7)+(A13*B13)] / sum(B1,B7,B13).

別の要素は次のとおりです。

[(A5*B5)+(A11*B11)+(A17*B17)] / sum(B5,B11,B17).

など...結果は2 x 3の行列です。ネストされた for ループのさまざまな組み合わせで遊んでいます。その例を以下に示しますが、適切に行う方法がわかりません...助けていただければ幸いです。

for (j in 1:2){
     for (k in 1:3){
          ans[j*k]=sum(A[j,k,1:3]*B[j,k,1:3])/sum(B[j,k,1:3])
     }
}
4

2 に答える 2

5

できるよ:

apply(A * B, c(1,2), sum) / apply(B, c(1,2), sum)
于 2012-09-12T02:49:09.363 に答える
1

あなたの表現を書き直します:

for (j in 1:2){
     for (k in 1:3){
          ans[j,k]= dotProduct(A[k,j],B[k,j])/sum(B[k,j])
     }
}
于 2012-09-12T03:24:36.487 に答える