我有一个这样的矩阵(A)(行和列的名称是识别码(ID):
1 3 10 38 46
1 0 0.4 0 0 0
3 0 0 0 0 0
10 0 0 0.9 0.8 0
38 0 0 0 0 0
46 0 0.1 0 0 0
另一个矩阵(B)是这样的:
a b c
1 2.676651e-04 4.404911e-06 9.604227e-06
3 6.073389e-10 3.273222e-05 3.360321e-04
10 4.156392e-08 1.269607e-06 7.509217e-06
38 4.200699e-08 3.227431e-02 8.286920e-11
46 9.352353e-05 3.318948e-20 8.694981e-06
我想取A矩阵的元素索引> 0,因此我使用了这个命令:
temp <- apply(A,1, FUN=function(x) which(x>0))
它返回了一个列表,其中包含元素&gt; 0的正确索引。
之后,我想使用索引乘以矩阵B的元素。特别是,我想为每一行做类似的事情:
1: 6.073389e-10*3.273222e-05*3.360321e-04
我已经使用矩阵A的信息(在第一行的第二列中我有一个值> 0)作为索引来获取第一行的矩阵B中的元素。
对于第二行,我获得0,因为A [2,]> 0
中没有元素对于第三行,我想获得类似第一行的内容,但我应该总结这两个产品
10: 4.156392e-08*1.269607e-06*7.509217e-06 +4.200699e-08*3.227431e-02*8.286920e-11
我试图取消列表列表,但是这样我获得了一个丢失ID
之间对应的向量答案 0 :(得分:0)
A <-
matrix(
c(0, 0.4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.9, 0.8, 0, 0, 0, 0, 0, 0, 0, 0.1, 0, 0, 0),
nrow = 5,
ncol = 5,
byrow = T
)
B <-
matrix(
c(
2.676651e-04, 4.404911e-06, 9.604227e-06,
6.073389e-10, 3.273222e-05, 3.360321e-04,
4.156392e-08, 1.269607e-06, 7.509217e-06,
4.200699e-08, 3.227431e-02, 8.286920e-11,
9.352353e-05, 3.318948e-20, 8.694981e-06
),
nrow = 5,
ncol = 3,
byrow = T
)
idx<-which(A>0, arr.ind = T)
result <- 0;
for (i in 1:nrow(idx)) {
cat(A[idx[i,1],idx[i,2]], sep="\n")
cat(B[idx[i,2], ], sep="\n")
result = result + sum(A[idx[i,1],idx[i,2]] * B[idx[i,2],])
}
cat("result=")
cat(result)