# These are the two matrices that I would like to subset based on identical
# entries within entire rows.
mata <- matrix(c("A", "B", "C", "F", "D", "E", "F", "G"),
nrow = 4, ncol = 2,
dimnames = list(c(), c("A", "B")))
mata
## A B
## [1,] "A" "D"
## [2,] "B" "E"
## [3,] "C" "F"
## [4,] "F" "G"
matb <- matrix(c("B", "A", "C", "F", "M", "D", "D", "H", "G", "X"),
nrow = 5, ncol = 2,
dimnames = list(c(), c("A", "B")))
matb
## A B
## [1,] "B" "D"
## [2,] "A" "D"
## [3,] "C" "H"
## [4,] "F" "G"
## [5,] "M" "X"
如果这两个矩阵不是无序的,长度相同,那么下面的代码应该可以工作,并且是有效的。
mata[rowMeans(mata == matb) == 1, ]
我的一个老练的解决方案是将我要用于匹配的每个矩阵的各个列串联起来。在本例中,我将使用所有列。
mata <- cbind(mata, C = paste0(mata[, "A"], "_", mata[, "B"]))
matb <- cbind(matb, C = paste0(matb[, "A"], "_", matb[, "B"]))
mata[mata[, "C"] %in% matb[, "C"], colnames(mata) != "C"]
## A B
## [1,] "A" "D"
## [2,] "F" "G"
这就是我正在寻找的结果,但我想知道是否有更优雅的东西,比如%中的向量函数%。
该解决方案应适用于矩阵长度不一定相等的一般情况。
如果加载dplyr,则添加intersect.data.frame
:
library(dplyr)
options(stringsAsFactors=FALSE)
dfa <- as.data.frame(mata)
dfb <- as.data.frame(matb)
intersect(dfa,dfb)
# A B
# 1 A D
# 2 F G
类似地,Union
,setEqual
(测试集相等)和setdiff
(set减)都是可用的。
在一边数据的每一行。frame对应于一个观察值,所以讨论两组观察值(两个data.frames)的相交是有意义的。然而,对于矩阵来说,这真的没有意义。这就是为什么如果你想继续使用矩阵,这个操作需要像OP的解决方案和@RHertel的(在幕后强制使用data.frame)这样的黑客。
您可以使用函数并合并()
:
> merge(mata,matb)
A B
1 A D
2 F G
你好,我是matlab新手,我不知道如何解决问题。 我有: 和Matrix2: Matrix2按照链接出现的顺序表示在Matrix1中找到的链接。 我想在块(矩阵)中分离链接,每个块从停止1开始。因此,通过分析矩阵2,我应该产生两个新的矩阵,一个是链接(1,2)(2,3)(3,4),另一个是链接(1,2)(2,3)(3,4)(4,5)。所以每次我找到stop 1,它就会开始构建一个新的矩阵 我希望
我有两个矩形,每个矩形有4个值: 左侧位置< code>X、顶部位置< code>Y、宽度< code>W和高度< code>H: 矩形不旋转,如下所示: 判断两个矩形的交集是否为空的最佳解是什么?
我喜欢将具有相同行的两个矩阵的列的所有可能组合相乘。这意味着两个矩阵,例如和将生成包含元素的3x4矩阵。(和表示从1到3的行,表示从1到4的列) 我已经创建了一个例子,可以完成这项工作,但正在寻找没有for循环的优雅解决方案。 这里a是3x3矩阵,b是3x4矩阵,comb通过乘以各个列给出3x12矩阵的输出。我正在寻找优雅的解决方案,可以推广到这样的乘法到两个以上的矩阵。
产出: 在文件include from/usr/include/C++/4.8/IOStream:39:0、from proy3.cpp:2:/usr/include/C++/4.8/ostream:548:5:注意:模板std::basic_ostream&std::operator<<(std::basic_ostream&,const无符号char*)操作符<<(Basic_ostream&
假设我们有两个矩阵,即和,分别为和。 我们如何才能找到哪些行与行相同(反之亦然)? 优选的输出是矩阵,其行数等于矩阵和之间的标识行,两列,即第一列包含矩阵的行数,第二列包含矩阵的行数。
我需要写一个函数,把一个正整数数组a、一个正整数B和一个正整数C作为输入。然后,函数应该返回长度为B和C的两个不相交子数组a的元素的总和,这些元素的总和最大化这些总和。例如,如果A=[3,11,1,2,9,4,5,6,1],B=4和C=2,那么函数应该返回38。这是因为A的长度为B和C的两个最大的不相交子数组是[9,4,5,6]和[3,11]。第一个子阵列的元素之和是9+4+5+6=24,第二个子