寻找相等的矩阵线

时间:2013-12-03 15:55:16

标签: r matrix row point equality

我有一个矩阵,其中每一行代表一个数据点(它是一个nxp矩阵,有n个p维点),我需要找出是否有一对相等的点。

只有两点,我可以申请dist,但随着点数的增加,我需要对dist进行比较的数量也是如此(因为我只比较两个一次点。)

所以,当我开始使用大矩阵时,我需要一种快速的方法来查找是否有两个点是相等的(或者如果这个矩阵中有两个相等的行)。

有什么建议吗?

编辑:因为我不需要返回相等行的数字(我只需要验证任何两个是否相等),我想我可以创建一个没有重复行的矩阵,只需比较行数在这个矩阵和原始矩阵之间。你觉得怎么样?

2 个答案:

答案 0 :(得分:0)

使用unique功能,该功能专门设置为允许您检查矩阵中的唯一行或列。或者,根据您是否要保存简化矩阵,您可以使用duplicated作为朱巴指出。

答案 1 :(得分:0)

如果矩阵很大,请考虑使用数据表。

library(data.table)
n  <- 1e6
set.seed(1)
df <- data.frame(x.1=round(runif(n,0,100)),
                x.2=round(runif(n,0,100)),
                x.3=round(runif(n,0,100)),
                x.4=round(runif(n,0,100)))
dt <- data.table(df)

system.time(df.dupe <- duplicated(df))
#   user  system elapsed 
#  16.55    0.01   16.60 
system.time(dt.dupe <- duplicated(dt))
#   user  system elapsed 
#   9.79    0.05    9.83 
setkeyv(dt,colnames(dt))
system.time(dt.dupe <- duplicated(dt))
#   user  system elapsed 
#   0.08    0.00    0.07 

因此,没有密钥,数据表的速度提高约40%。使用按键,它们的速度提高了约160倍。当然你必须创建密钥(sort),这需要大约10秒,所以如果你只做一次,最好使用无键数据表。