欧几里德距离的两个向量

时间:2011-04-05 22:18:11

标签: r

如何找到两个向量的欧几里德距离:

x1 <- rnorm(30)
x2 <- rnorm(30)

4 个答案:

答案 0 :(得分:59)

使用dist()函数,但您需要从dist()的第一个参数的两个输入形成一个矩阵:

dist(rbind(x1, x2))

对于OP问题中的输入,我们得到:

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

单个值,即x1x2之间的欧几里德距离。

答案 1 :(得分:34)

正如Wikipedia所定义的那样,应该这样做。

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

rdist包中的fields函数可能很有用。请参阅here


编辑:将**运算符更改为^。谢谢,加文。

答案 2 :(得分:12)

尝试使用:

sqrt(sum((x1-x2)^2))

答案 3 :(得分:0)

如果您想使用更少的代码,也可以在stats package中使用norm(“ F”代表Forbenius, which is the Euclidean norm):

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

虽然这看起来更整洁,但速度并不快。的确,尽管so12311的方法稍快一些,但对非常大的矢量进行快速测试几乎没有什么区别。我们首先定义:

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

然后通过时间测试得出:

> 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