好,
假设我有2个点,x,y坐标,
a<-c(1,1)
b<-c(10,10)
现在我想找到上面哪一点最接近我的新观点,
ce<-(2,2)
那里必须有一个功能,但是knn太复杂了。
答案 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