新点最接近哪个旧点?

时间:2018-02-25 19:02:38

标签: r

好,

假设我有2个点,x,y坐标,

a<-c(1,1)
b<-c(10,10)

现在我想找到上面哪一点最接近我的新观点,

ce<-(2,2)

那里必须有一个功能,但是knn太复杂了。

2 个答案:

答案 0 :(得分:1)

您可以使用dist()计算两点之间的距离(欧几里得)。

> a <- c(1,1)
> b <- c(10,10)
> ce <- c(2,2)

> dist(rbind(x, a))
         x
a 1.414214

> dist(rbind(x, b))
         x
b 11.31371

a is closed to ce.

答案 1 :(得分:1)

Manish的回答是正确的。但是,您可能也对可以推广到两点以上的解决方案感兴趣。在这种情况下,我们首先要创建一个矩阵,矩阵中的每一列都是我们的一个点。您可以随意创建此矩阵。以下是一个例子

> point_1 <- c(1, 6)
> point_2 <- c(2, 4)
> point_3 <- c(-1, -1)
> points <- matrix(c(point_1, point_2, point_3), nrow = 2)
> points
     [,1] [,2] [,3]
[1,]    1    2   -1
[2,]    6    4   -1

接下来,我提供了一个函数来计算从所有这些点到单个测试点的距离。该函数使用R将在需要时回收向量的事实。

> my_point <- c(1, 1)
> distances <- sqrt(colSums((points - my_point) ^ 2))
> distances
[1] 5.000000 3.162278 2.828427

最后,您可以通过找到此矢量最小的元素来找到最接近原点的点。

> closest_point <- which.min(distances)
> points[, closest_point]
[1] -1 -1

或者,您可以将所有点放入单个矩阵中,并使用dist函数计算所有成对距离。但是,这将执行比必要更多的计算。

> all_points <- rbind(point_1, point_2, point_3, my_point)
> dist_mat <- dist(all_points)
> dist_mat
          point_1  point_2  point_3
point_2  2.236068                  
point_3  7.280110 5.830952         
my_point 5.000000 3.162278 2.828427