【发布时间】:2020-10-07 16:36:19
【问题描述】:
作为输入,我有一个二维数组 PointXY[][] clusters,如下所示:
[[23.237633,53.78671], [69.15293,17.138134], [23.558687,45.70517]] . . .
[[47.851738,16.525734], [47.802097,16.689285], [47.946404,16.732542]]
[[47.89601,16.638218], [47.833263,16.478987], [47.88203,16.45793]]
[[47.75438,16.549816], [47.915512,16.506475], [47.768547,16.67624]]
.
.
.
所以数组中的元素是PointXY[] 类型,定义如下:
public PointXY(float x, float y) {
this.x = x;
this.y = y;
}
我想做的是对输入集群进行排序并将排序写入数组PointXY[][] clustersSorted,以便将集群中的每个PointXY(除了第一行)与第一行的每个值进行比较。
换句话说,下图中蓝色集合中的元素与红色圈出的每个值进行比较。
所以我想比较从 2. 开始的每个值到第一行中的每个值。
通过调用欧几里得函数进行比较。
public double euclidian(PointXY other) {
return Math.sqrt(Math.pow(this.x - other.x, 2)
+ Math.pow(this.y - other.y, 2));
}
输出应该是相同类型的二维数组,但在每个红色圆圈点下(在输出数组的同一位置保持相同)应该是蓝色部分中最接近(欧几里得距离)红色圆圈值的点.
所以它是 K-Means 聚类的数据结构,因此每个聚类是一列(绿色圆圈),第一个点是聚类的中心(红色圆圈),所有其他点(黄色圆圈)在列是分配给中心的点。
所以问题是如何遍历输入数组簇,比较所描述的值,并将它们写入数组clustersSorted。
我想计算蓝色圆圈集中每个点之间的欧几里德距离,每个值都用红色圆圈圈出。然后根据最小欧几里得距离对它们进行排序。因此,在输出数组clustersSorted 中,蓝色圆圈集中的每个点都将位于红色圆圈中的最近点之下。
【问题讨论】:
标签: java sorting multidimensional-array k-means