[R] Efficient way to Calculate the squared distances for a set ofvectors to a fixed vector

Tsjerk Wassenaar tsjerkw at gmail.com
Wed Aug 24 09:02:14 CEST 2011


Hi Wei Wu,

What about:

x <- matrix(rnorm(20000*5),ncol=5)
y <- rnorm(5)
distances <- rowSums((x-y)**2)

Cheers,

Tsjerk

On Wed, Aug 24, 2011 at 8:43 AM, Enrico Schumann
<enricoschumann at yahoo.de> wrote:
>
> You could do something like this:
>
> # data
> nrows <- 20000L
> ncols <- 5L
> myVec <- array(rnorm(nrows * ncols), dim = c(nrows, ncols))
> y <- rnorm(ncols)
>
> temp <- t(myVec) - y
> result <- colSums(temp * temp)
>
> # check
> all.equal(as.numeric(crossprod(myVec[1L, ] - y)), result[1L])
> #...
>
> (And don't use a data.frame, but a matrix.)
>
> regards,
> Enrico
>> -----Ursprüngliche Nachricht-----
>> Von: r-help-bounces at r-project.org
>> [mailto:r-help-bounces at r-project.org] Im Auftrag von Wei Wu
>> Gesendet: Mittwoch, 24. August 2011 07:18
>> An: r-help at r-project.org
>> Betreff: [R] Efficient way to Calculate the squared distances
>> for a set ofvectors to a fixed vector
>>
>> I am pretty new to R. So this may be an easy question for most of you.
>>
>> I would like to calculate the squared distances of a large
>> set (let's say 20000) of vectors (let's say dimension of 5)
>> to a fixed vector.
>>
>> Say I have a data frame MY_VECTORS with 20000 rows and 5
>> columns, and one 5x1 vector y. I would like to efficiently
>> calculate the squared distances between each of the 20000
>> vectors in MY_VECTORS and y.
>>
>> The squared distance between two vectors x and y can be calculated:
>> distance <- crossprod(x-y)
>>
>> Without looping, what is the efficient code to achieve this?
>>
>> Thanks.
>>
>> ______________________________________________
>> 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.
>
> ______________________________________________
> 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.
>



-- 
Tsjerk A. Wassenaar, Ph.D.

post-doctoral researcher
Molecular Dynamics Group
* Groningen Institute for Biomolecular Research and Biotechnology
* Zernike Institute for Advanced Materials
University of Groningen
The Netherlands



More information about the R-help mailing list