我想在R中将两个矩阵相乘,其中一个可能包含随机放置的NA值(即,没有理由将它们全部放在一行或一列中),但我仍然想要一个输出,如下例所示:
Matrix 1
[1,] 33 45 50
[2,] NA NA 54
Matrix 2
[1,] A1 0.0000000 0.0000000
[2,] 0.0000000 A2 0.0000000
[3,] 0.0000000 0.0000000 A3
Result
[1,] 33*A1 45*A2 50*A3
[2,] NA NA (NA*0 +NA*0 +54*A3)=54*A3
Run Code Online (Sandbox Code Playgroud)
简单地做Matrix1%*%Matrix2并没有给出我想要的第2行第3列中的元素(它给出NA,这是有道理的,但不知道如何做我想做的事情).就我的目的而言,Matrix 2永远不会有NA值,如果它改变了什么.
我有两个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
Run Code Online (Sandbox Code Playgroud)
我想要做的是创建一个矩阵,其中3 A矩阵被平均,并且某个位置的值由相应的B值加权......我无法解释,但是例如,第一个元素是:
[(A1*B1)+(A7*B7)+(A13*B13)] / sum(B1,B7,B13).
Run Code Online (Sandbox Code Playgroud)
另一个因素是:
[(A5*B5)+(A11*B11)+(A17*B17)] / sum(B5,B11,B17).
Run Code Online (Sandbox Code Playgroud)
等等...结果是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])
}
}
Run Code Online (Sandbox Code Playgroud)