[R] distance between two matrices

Prof Brian Ripley ripley at stats.ox.ac.uk
Wed Jan 28 09:34:55 CET 2004


Sounds like knn classification.  See function knn1 in package class.

> knn(A, B, 1:nrow(A))

gives the same answers as your loop code, and is just a carefully tuned C 
equivalent.

There are faster ways to do this by preprocessing set A discussed e.g. in 
my PRNN book but your numbers took only 11s on my PC.

On Tue, 27 Jan 2004, Sundar Dorai-Raj wrote:

> Hi all,
>    Say I have a matrix A with dimension m x 2 and matrix B with 
> dimension n x 2. I would like to find the row in A that is closest to 
> the each row in B. Here's an example (using a loop):
> 
> set.seed(1)
> A <- matrix(runif(12), 6, 2) # 6 x 2
> B <- matrix(runif(6), 3, 2)  # 3 x 2
> m <- vector("numeric", nrow(B))
> for(j in 1:nrow(B)) {
>    d <- (A[, 1] - B[j, 1])^2 + (A[, 2] - B[j, 2])^2
>    m[j] <- which.min(d)
> }
> 
> All I need is m[]. I would like to accomplish this without using the 
> loop if possible, since for my real data n > 140K and m > 1K. I hope 
> this makes sense.
> 
> Thanks,
> Sundar
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html
> 
> 

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595




More information about the R-help mailing list