Digamos que eu tenha duas matrizes A e B dadas por
set.seed(123)
m1 = matrix(runif(10*5), nrow = 10, ncol = 5)
m2 = matrix(runif(10*5), nrow = 10, ncol = 5)
Quero encontrar para cada linha da matriz A a linha da matriz B que está mais próxima da linha da matriz A. Sei que posso fazer isso percorrendo cada linha de A e comparando-a com cada linha de B assim:
for(i in 1:nrow(m1)){
dist = 9999
index = -1
for(j in 1:nrow(m2)){
test = sqrt(sum(abs(m1[i,]-m2[j,])))
if (test < dist) {
dist = test
index = j
}
}
print(index)
}
No entanto, tenho um milhão de linhas e isso leva uma eternidade. Estou lutando para encontrar uma maneira eficiente. Alguma ideia?
Um benchmark de acompanhamento baseado na solução de @Ronak Shah
mostra
Podemos usar
dista
do RfastAqui está uma solução R básica usando
apply
:Comparando-o com sua solução atual, ele se sai bem:
Considere usar Rcpp/C: