Skip to content
Back to formatted view

Raw Message

Message-ID: <B3A80C9C13928B45B2FCE4C43656363A0194E3EE@mail-srv02.master.medizin.uni-essen.de>
Date: 2004-01-28T12:42:58Z
From: "Hüsing, Johannes"
Subject: distance between two matrices

> 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))

make the lines below a function of a vector argument and 
apply it over the rows of B.

?apply for more info. You'll want to know about apply if
you want to avoid loops (which is a good approach).

> 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.

Thing is, the above approach requires all data to be in main memory.
i hope this is not a problem.