当前位置: 首页 > 知识库问答 >
问题:

R中两个矩阵间的恒等行

齐望
2023-03-14

假设我们有两个矩阵,即M1M2,分别为n1 x mn2 x m

我们如何才能找到哪些M1行与M2行相同(反之亦然)?

优选的输出是矩阵,其行数等于矩阵M1M2之间的标识行,两列,即第一列包含矩阵M1的行数,第二列包含矩阵M2的行数。

共有2个答案

燕刚捷
2023-03-14

创建具有4个匹配行的示例矩阵

set.seed(0)
M1 <- matrix(runif(100), 10)
M2 <- rbind(M1[sample(10, 4),], matrix(runif(60), 6))

创建输出

splits <- lapply(list(M1, M2), function(x) split(x, row(x)))
out <- cbind(M1 = seq(nrow(M1)), M2 = do.call(match, splits))
out[!is.na(out[,2]),]
#      M1 M2
# [1,]  2  4
# [2,]  3  3
# [3,]  6  2
# [4,]  7  1
彭星津
2023-03-14

可能有更巧妙的方法,但这似乎行得通...

#dummy data
M1 <- matrix(1:8,ncol=2)
M2 <- matrix(c(1,3,4,5,6,8),ncol=2)

M1
     [,1] [,2]
[1,]    1    5
[2,]    2    6
[3,]    3    7
[4,]    4    8

M2
     [,1] [,2]
[1,]    1    5
[2,]    3    6
[3,]    4    8

which(apply(M2, 1, function(v) 
           apply(M1, 1, function(w) sum(abs(w-v))))==0,
      arr.ind = TRUE)

     row col
[1,]   1   1
[2,]   4   3

row列是M1的行索引,col列是M2中匹配行的索引。

 类似资料:
  • 我有一个有三个带的光栅和一个有三个列的矩阵。 我想找到y的每一行和r的每一个单元格之间的角度。 我可以通过以下方式将光栅转换为矩阵: 现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。 我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来

  • 我有一个矩阵,我想和另外两个矩阵进行比较,看看我矩阵中的每个条目是包含在另外两个矩阵的值之内还是之外。例如,如果我的矩阵是: 另外两个矩阵是L和U: 和 我想取M的每个条目,比较一下它是否包含在L和U对应条目的范围内。 例如,对于M[1,1],它在-0.49416022和-0.84996737的范围之外,所以我将给这个比较赋值0。另一方面,对于M[2,3],值是-0.5240536,因此在1.14

  • 主要内容:语法,例子,访问矩阵的元素,矩阵计算矩阵是其中元素以二维矩形布局排列的R对象。它们包含相同原子类型的元素。 虽然我们可以创建一个仅包含字符或仅包含逻辑值的矩阵,但它们没有太多用处。 我们使用包含数学元素的矩阵来在数学计算中使用。 矩阵可通过使用函数来创建。 语法 在R中创建矩阵的基本语法是 - 以下是使用的参数的描述 - data - 是将要转为矩阵元素的输入向量。 nrow - 是要创建的行数。 ncol - 是要创建的列数。 b

  • 我有22个矩阵,行数相等(即691个),列数不同(即22-25个)。我必须在每个矩阵中添加对应于同一行、同一列的值,从而得到一个维度为691*25的矩阵。 每个矩阵都是带有数值的双矩阵。如何将这两个矩阵相加,得到第三个矩阵的维数为691*25。因为fullanno2短三列,所以对于这些列,生成的矩阵将只有来自第一个矩阵的值。 我的方法是:使用colname的setdiff来获取较小矩阵中不存在的列

  • A=矩阵(c(1,2,3,0,2,2,0,2,3),nrow=3,ncol=3) B=矩阵(c(1,2,3,1,4,2,2,1),nrow=3,ncol=3) C=A B/(总和差为零) C=矩阵(c(1,2,3, 1, 3, 2, 2,2 ,2),nrow=3,nco=3) 我需要对N个矩阵的列表执行此操作(mat_vect[[I]]): 求和矩阵并得到平均值 这里是所有数字的除法,包括零。我不

  • 我有两个列表,每个列表中有两个矩阵。。是否有一种方法可以对它们进行矩阵计算,即相加,其中matrix1中的蓝色矩阵与matrix2中的蓝色矩阵相加,matrix1中的红色矩阵与matrix2中的红色矩阵相加。我能想到的唯一方法是在循环中进行计算 请注意,我将有大约10个,以及不止一组(即蓝色、红色、绿色、紫色)