2015-09-30 62 views
1

在R I具有两个向量查找具有最小欧几里得距离矢量的点中的R

a = c(25,24,25) 
b = c(33,33,32,31,26) 

我使用dist()函数来计算a,b向量的值的欧几里德距离。

我想找到与a中的点具有最小距离的值b

目前我的代码是:

minDist = min(dist(c(a,b), method="euclidean")) 

我怎样才能找到具有最小距离的点?

回答

1

我宁愿这样进行:

m = outer(a,b, FUN=function(x,y) (x-y)**2) 

which(m==min(m), arr.ind=T) 
    row col 
[1,] 1 5 
[2,] 3 5 

指出元素5ba最接近元素13

事实上:

#> m 
#  [,1] [,2] [,3] [,4] [,5] 
#[1,] 64 64 49 36 1 
#[2,] 81 81 64 49 4 
#[3,] 64 64 49 36 1 

相反的outer,一个快速的解决办法是:

nc = length(b) 
nr = length(a) 
m = (matrix(a, ncol=nc, nrow=nr) - matrix(b, ncol=nc, nrow=nr, byrow=T))**2 
+0

谢谢您的回复!你能解释一下我的结果吗?结果是'b [5]'和'a [3]'以及?所以如果结果存储在'w'中,结果会是什么样子? – zinon

+0

我增加了一些解释;)它取决于你用'outer'进行的顺序(我们可以写'outer(b,a,...)') –

+0

明白了!刚刚看到您编辑的回复!万分感谢! – zinon

相关问题