【发布时间】:2012-03-08 04:27:12
【问题描述】:
有没有一种快速的方法可以找到矩阵 A 中的哪些行存在于矩阵 B 中? 例如
m1 = matrix(c(1:6), ncol=2, byrow = T); m2 = matrix(c(1:4), ncol=2, byrow=T);
结果将是 1、2。
矩阵的行数不同(列数相同),而且它们有些大 - 从 10^6 - 10^7 行数。
据我所知,最快的方法是:
duplicated(rbind(m1, m2))
Tnx!
【问题讨论】:
-
您使用
duplicated的解决方案也将返回在矩阵中重复的任何行,即使它只出现在两个矩阵之一中。无论如何,@MatthewDowle 的回答很棒。 -
data.table可能会更快,因为它在后台不使用do.call("paste"。如果您更喜欢duplicated而不是M2[M1],那么出于同样的原因,duplicated(as.data.table(rbind(m1,m2)))可能会更快。有兴趣看看你的时间安排。 -
@David 哦,是的,关于
duplicated方法的要点。 -
重复? stackoverflow.com/questions/7943695/matrix-in-matrix(或者,至少,“在这里寻找其他选项!”)