基本R:带有循环的三维数组中的乘法元素

时间:2012-09-12 02:25:34

标签: arrays r linear-algebra vectorization matrix-multiplication

我有两个3-D阵列, A B ,每个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 值加权... I不能很好地解释,但例如,第一个元素是:

[(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])
     }
}

2 个答案:

答案 0 :(得分:5)

你可以这样做:

apply(A * B, c(1,2), sum) / apply(B, c(1,2), sum)

答案 1 :(得分: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])
     }
}