Euclidean distance of two vectors

后端 未结 4 1631
南旧
南旧 2020-11-29 02:32

How do I find the Euclidean distance of two vectors:

x1 <- rnorm(30)
x2 <- rnorm(30)
相关标签:
4条回答
  • 2020-11-29 03:21

    As defined on Wikipedia, this should do it.

    euc.dist <- function(x1, x2) sqrt(sum((x1 - x2) ^ 2))
    

    There's also the rdist function in the fields package that may be useful. See here.


    EDIT: Changed ** operator to ^. Thanks, Gavin.

    0 讨论(0)
  • 2020-11-29 03:25

    If you want to use less code, you can also use the norm in the stats package (the 'F' stands for Forbenius, which is the Euclidean norm):

    norm(matrix(x1-x2), 'F')
    

    While this may look a bit neater, it's not faster. Indeed, a quick test on very large vectors shows little difference, though so12311's method is slightly faster. We first define:

    set.seed(1234)
    x1 <- rnorm(300000000)
    x2 <- rnorm(300000000)
    

    Then testing for time yields the following:

    > system.time(a<-sqrt(sum((x1-x2)^2)))
    user  system elapsed 
    1.02    0.12    1.18 
    > system.time(b<-norm(matrix(x1-x2), 'F'))
    user  system elapsed 
    0.97    0.33    1.31 
    
    0 讨论(0)
  • 2020-11-29 03:31

    try using this:

    sqrt(sum((x1-x2)^2))
    
    0 讨论(0)
  • 2020-11-29 03:35

    Use the dist() function, but you need to form a matrix from the two inputs for the first argument to dist():

    dist(rbind(x1, x2))
    

    For the input in the OP's question we get:

    > dist(rbind(x1, x2))
            x1
    x2 7.94821
    

    a single value that is the Euclidean distance between x1 and x2.

    0 讨论(0)
提交回复
热议问题