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

高效优雅地检查矩阵的哪些行存在于另一个矩阵中

南门朗
2023-03-14

假设我们想检查一个矩阵(或数据框)中的哪些行存在于另一个矩阵中。我找到的所有解决方案,这个肯定基本的操作似乎要么需要一个库(这个{data.table} 4-线性),要么是冗长和模糊的,例如:

(m1 = matrix(1:10, ncol=2))
     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10
(m2 = matrix(c(1,3,4,-1,6,7,9,8), ncol=2))
     [,1] [,2]
[1,]    1    6
[2,]    3    7
[3,]    4    9
[4,]   -1    8

# ugh!
rowSums(outer(m2[,1], m1[,1], "==") & outer(m2[,2], m1[,2], "==")) != 0
[1]  TRUE FALSE  TRUE FALSE

有人知道一种使用基函数的更优雅的方法,其效率与本例相当吗? 代码无效。

共有1个答案

慕容安易
2023-03-14

根据此答案,您可以使用match:

> m1 = matrix(1:10, ncol=2)
> m2 = matrix(c(1,3,4,-1,6,7,9,8), ncol=2)
> m<-match(data.frame(t(m1)), data.frame(t(m2)))
> m
[1]  1 NA NA  3 NA

您可以轻松更改match的结果以适合您的首选格式:

> !is.na(m)
[1]  TRUE FALSE FALSE  TRUE FALSE
> which(!is.na(m))
[1] 1 4

您可以使用以下任一变体检索行:

> m1[!is.na(m),]
     [,1] [,2]
[1,]    1    6
[2,]    4    9

但是如果你真的想要,而不是索引,只需使用合并(返回一个data.frame):

> merge(m1, m2)
  V1 V2
1  1  6
2  4  9
 类似资料:
  • 问题内容: 在这里处理一些矩阵代数。有时我需要将一个可能为奇数或病态的矩阵求逆。我知道简单地做到这一点是pythonic的: 但不确定效率如何。这会更好吗? numpy.linalg是否可以简单地执行我所要求的测试? 问题答案: 因此,根据此处的输入,我将显式测试标记为原始代码块作为解决方案: 令人惊讶的是,numpy.linalg.inv函数不执行此测试。我检查了一下代码,发现它经过了所有处理,

  • 我想在Python中生成一个小于或等于另一个矩阵的随机0-1矩阵。例如,我有一个特定的矩阵: 我想生成一个随机矩阵: 正如我们所看到的,A>=Y。我如何在Python中生成随机矩阵y?

  • 问题内容: 我正在尝试编写一种算法,用于在给定的子矩阵中查找子矩阵。为了解决这个问题,我编写了以下代码: 这段代码可以正常工作,但是我不确定这是问题的确切解决方案还是可以解决。请提供您的专家意见。提前致谢。 问题答案: 该算法对4×4矩阵和2×2子矩阵进行了硬编码。否则,它看起来像蛮力算法。 我会这样表示: 如果您想要更有效的方法,建议您将它们压扁,如下所示: 并在此序列中搜索以下模式: 使用标准

  • 很少的要求。 在发布你的答案之前,请!! 确保函数不会对其他数据产生错误,模拟几个类似的矩阵。(关掉种子) 确保你的功能比我的快 确保你的函数和我的完全一样,在不同的矩阵上模拟它(关闭种子) 举个例子 目前我已收到多达5个答案,但没有一个适合上述任何一点: ======================================================函数在逻辑矩阵的第一列中查找,如果

  • 问题内容: 我是Numpy的新手,想替换矩阵的一部分。例如,我有两个由numpy生成的矩阵A,B 最终,我想使A为以下矩阵。 和/或以下 我尝试跟随,但没有用。我现在不知道了:( 甚至我尝试过 检查四个单元是否更改。你有什么主意吗? 问题答案: 这是您可以执行的操作:

  • 着色器语言中通过关键字mat2、mat3、mat4分别声明一个2x2矩阵、3x3矩阵、4x4矩阵,通过内置函数mat2()、mat3()、mat4()分别创建一个2x2矩阵、3x3矩阵、4x4矩阵。 关键字 数据类型 mat2 2x2矩阵,4个元素 mat3 3x3矩阵,9个元素 mat4 4x4矩阵,16个元素 声明变量 关键子mat4声明一个4x4矩阵 mat4 matrix4; 构造函数赋