假设我们想检查一个矩阵(或数据框)中的哪些行存在于另一个矩阵中。我找到的所有解决方案,这个肯定基本的操作似乎要么需要一个库(这个{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
有人知道一种使用基函数的更优雅的方法,其效率与本例相当吗?
根据此答案,您可以使用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; 构造函数赋