Distances between two datasets of x and y co-ordinates
From: adrian at maths.uwa.edu.au
Andrew McFadden <Andrew.McFadden at maf.govt.nz> writes:
I am trying to determine the distances between two datasets
of x and y
points.
This can be done efficiently in the package 'spatstat'.
library(spatstat)
crossdist(x1, y1, x2, y2)
where x1, y1 are vectors of coordinates for the first set of points
and x2, y2 for the second set. See help(crossdist.default)
This is executed in C and is faster than using outer() or apply().
The margin may not be as large as you imagine:
crossdist2 <- function(x1, y1, x2, y2) {
c1 <- complex(real=x1, imaginary=y1)
c2 <- complex(real=x2, imaginary=y2)
dist <- outer(c1, c2, function(z1, z2) Mod(z1-z2))
dist
}
R> set.seed(17)
R> n <- 1000
R> x1 <- rnorm(n)
R> y1 <- rnorm(n)
R> x2 <- rnorm(n)
R> y2 <- rnorm(n)
R> system.time(d2 <- crossdist2(x1, y1, x2, y2))
user system elapsed
1.03 0.09 1.17
R> library(spatstat)
R> system.time(d1 <- crossdist2(x1, y1, x2, y2))
user system elapsed
1.08 0.03 1.12
R> all.equal(d1, d2)
[1] TRUE
Andy
The result is a matrix giving the distance between each pair of points (the first point in the first dataset and the second point in the second set). If these datasets are large, you can of course run into trouble with the size of this matrix. If you just wanted to find the distance to the *nearest* point (or identify which point is nearest), use the function nncross(). Adrian Baddeley
______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.
------------------------------------------------------------------------------
Notice: This e-mail message, together with any attachme...{{dropped:15}}