2

我有两个 3-D 数组,AB,每个 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 回答