[R] fastest way to compute the squared Euclidean distance between two vectors in R

Hesen Peng hesen.peng at gmail.com
Fri Feb 1 07:51:25 CET 2008


Hi,

I wonder whether the following may help a little:

Since $\sum (x_i - y_i)^2 = \sum x_i^2 + \sum y_i^2 - 2 \sum x_i y_i$,
we can modify the function as:

temp.distance<-function(x,y){
 sum(x^2) + sum(y^2) - 2* x %*% y
}

I think this may be helpful when you need to compute the bootstrap
distance for vectors from a matrix $X$. We simply need to
pre-calculate sum(x^2) for each vector $x$, and access the resulted
from designated vectors, say $xx$. Then we have:

xx<-RowSum(X^2)

another.distance<-function(i,j){ # i and j are the row index of vector x and y
 xx[i] + xx[j] - 2*x[i,] %*% x[j,]
}

On Jan 31, 2008 10:28 AM, Jason Liao <jg_liao at yahoo.com> wrote:
> I have a program which needs to compute squared Euclidean distance
> between two vectors million of times, which the Rprof shows is the
> bottleneck. I wondered if there is any faster way than my own simple
> function
>
> distance2 = function(x1, x2)
> {
>    temp = x1-x2
>    sum(temp*temp)
> }
>
> I have searched the R-help archives and can not find anything except
> when the arguments are matrices. Thanks for any lead.
>
> Jason
>
> Jason Liao, http://www.geocities.com/jg_liao
> Associate Professor of Biostatistics
> Drexel University School of Public Health
> 1505 Race Street, Mail Stop 1033
> Bellet Building, 6th Floor
> Philadelphia, PA   19102
> phone 215-762-3934
>
>
>       ____________________________________________________________________________________
> Looking for last minute shopping deals?
>
> ______________________________________________
> 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.
>



-- 
彭河森
Hesen Peng
Department of Statistics
Fudan University
Shanghai, P. R. C.


More information about the R-help mailing list