我有两个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])
}
}
答案 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])
}
}