给定两个 [n,2] 矩阵,我想比较它们,如下例所示:
library('fastmatch')
Matrix2Curt=cbind(c(1,2,3,4),c(5,6,7,8))
Matrix2compare=cbind(c(1,2,3,4,5,6,7,3,9),c(5,1,2,3,3,9,3,7,6))
a=lapply(split(Matrix2compare,row(Matrix2compare)),as.numeric)
b=lapply(split(Matrix2Curt,row(Matrix2Curt)),as.numeric)
RmRowIndex=fmatch(a,b)
IndexInMatrix2comp<-which(!is.na(RmRowIndex))
RmRowIndex=na.omit(RmRowIndex)
OpenPositions=Matrix2Curt[-RmRowIndex,]
FoundPositions=Matrix2compare[IndexInMatrix2comp,]
我需要在更大的算法中进行大量此类计算,并且 90% 的运行时间都放在上述行中。有人知道更快的计算方法吗?
谢谢您的帮助
评论备注:是的,我将代码放在一个名为 setdiffMatrix() 的函数中,并多次调用该函数:
$by.self
self.time self.pct total.time total.pct
".Call" 1.76 84.62 1.76 84.62
"lapply" 0.14 6.73 0.32 15.38
"as.character" 0.10 4.81 0.10 4.81
"as.factor" 0.02 0.96 0.16 7.69
"eval" 0.02 0.96 0.02 0.96
"FUN" 0.02 0.96 0.02 0.96
"match" 0.02 0.96 0.02 0.96
$by.total
total.time total.pct self.time self.pct
"setdiffMatrix" 2.08 100.00 0.00 0.00
".Call" 1.76 84.62 1.76 84.62
"fmatch" 1.76 84.62 0.00 0.00
"lapply" 0.32 15.38 0.14 6.73
"as.factor" 0.16 7.69 0.02 0.96
"split" 0.16 7.69 0.00 0.00
"split.default" 0.16 7.69 0.00 0.00
"as.character" 0.10 4.81 0.10 4.81
"eval" 0.02 0.96 0.02 0.96
"FUN" 0.02 0.96 0.02 0.96
"match" 0.02 0.96 0.02 0.96
"match.arg" 0.02 0.96 0.00 0.00
"sort" 0.02 0.96 0.00 0.00
"sort.default" 0.02 0.96 0.00 0.00
"sort.int" 0.02 0.96 0.00 0.00
$sample.interval
[1] 0.02
$sampling.time
[1] 2.08