本题要求实现 K-Means 聚类算法。
初始时,直接选择输入数据的前 K 个点作为 K 个初始质心,编号分别为 0 到 K−1。
每轮迭代执行两步:
1. 对于每个点,计算它到所有质心的 3D 欧氏距离,将其分配到距离最近的簇中。
在自动驾驶感知系统中,激光雷达会扫描周围环境生成大量3D点云数据,每个点包含 x,y,z 3D空间坐标。为识别车辆、行人、路障等潜在障碍物,需要先对点云数据做聚类,将属于同一障碍物的点划分为同一个簇。
K-Means是常用的无监督聚类算法,核心是按空间距离分组。预先指定分组数 K,先选 K 个初始中心(质心),反复执行两步:
请实现K-Means聚类算法,将输入的点云数据划分为 K 个簇。要求如下:
第一行:两个整数 N(点的数量,1≤N≤1000)和 K(簇的数量,1≤K≤N),空格分隔。
后续 N 行:每行三个浮点数 x,y,z,表示3D坐标,范围 [−100,100]。
输出 N 行,每行一个整数(范围 0 到 K−1),代表第 i 个输入点所属的簇编号。
输入:
3 2
0.0 0.0 0.0
0.0 1.0 1.0
1.0 1.0 0.0
输出:
0
1
0
解释:初始质心为第0个点 (0.0,0.0,0.0)(编号0)和第1个点 (0.0,1.0,1.0)(编号1)。
第2个点 (1.0,1.0,0.0) 到质心0和质心1的距离均为 1.41。根据“距离相等选小编号”规则,被分配到簇0。
输入:
3 2
0.0 0.0 0.0
2.0 2.0 2.0
0.0 1.0 0.5
输出:
0
1
0
解释:初始质心为第0个点 (0.0,0.0,0.0)(编号0)和第1个点 (2.0,2.0,2.0)(编号1)。
第2个点 (0.0,1.0,0.5) 到质心0的距离约为 1.12,到质心1的距离约为 2.69,因此被分配到簇0。