繁体   English   中英

R:如何比较2个矩阵

[英]R: How to compare 2 matrices

我有2个矩阵

  1. matrix1(nrow = 3,ncol = 3)
  2. matrix2(nrow = 5,ncol = 5)

我知道如何用另一个矩阵的元素有条件地比较和替换一个矩阵的元素,但是只有这两个元素共享相同的[i,j]时才这样:

ifelse(matrix1<0.5, matrix2[,], matrix1[,])

题:

在这里,我想用另一列的matrix2元素替换matrix1的元素,如下所示:

如果 matrix1 [i,j] <0.5, 那么我想将其替换为matrix2 [i,j + 2] 否则,我想将其替换为matrix2 [i,j + 1]

问题是:

  • 由于性能我无法使用循环
  • 我不知道如何向ifelse进行解释,以继续讨论其他专栏。

如何在大矩阵上有效地进行这种比较?

数据如下:

> dput(matrix1)
structure(c(0.782534098718315, 0.279918688116595, 0.139927505282685, 
0.485497816000134, 0.150636059232056, 0.976677459431812, 0.101831247797236, 
0.491994257550687, 0.492571017006412), .Dim = c(3L, 3L))

> dput(matrix2)
structure(1:25, .Dim = c(5L, 5L))

这里m1m2是两个矩阵。 根据@alexis_laz注释,您可以尝试

indx1 <- tail(seq(ncol(m1)+1),ncol(m1))
indx2 <-  tail(seq(ncol(m1)+2),ncol(m1))
rowInd <- 1:nrow(m1)
ifelse(m1 < 0.5, m2[rowInd,indx2], m2[rowInd, indx1])
#    [,1] [,2] [,3]
#[1,]    6   16   21
#[2,]   12   17   22
#[3,]   13   13   23

或者您可以通过创建index

 indx <- cbind(c(row(m1)), c(col(m1)))
 indx1 <- cbind(indx[,1], indx[,2]+1)
 indx2 <- cbind(indx[,1], indx[,2]+2)
 ifelse(m1 < 0.5, m2[indx2], m2[indx1])
 #     [,1] [,2] [,3]
 #[1,]    6   16   21
 #[2,]   12   17   22
 #[3,]   13   13   23

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM