首页 > 解决方案 > 如何在二维列表python中合并关闭点

问题描述

我在合并 Voronoi 图的关闭点时遇到了麻烦,情况如下:

  1. 我从图像加载地图
  2. 地图被转换为仅包含表示障碍的点的数组
  3. Voronoi 图是从此数组计算的

然后是我在“障碍物”内有顶点的问题,如图所示在此处输入图像描述

我的想法是将包含许多点的障碍物转换为一个点。

点列表与此类似:

map = [[11, 29], [11, 30], [11, 31], [12, 28], [12, 29], [12, 30]]

我想取一组点并将这些点合并为一个。

在 numpy-2d(矢量化)中找到了这个快速熔断点的闭合点

考虑到不是“点状”的障碍物,我不知道如何融合这些点

标签: pythonnumpyvoronoikdtree

解决方案


我建议你不要map作为变量名,因为有一个同名的函数。您在流派中的问题是找到与您的链接中的问题相似的集群,但基于数据 k-Dtree 可能不是很好。我会推荐scikit的其他聚类算法:

  • KMeans,如果你知道障碍的数量
  • DBSCAN,如果您知道障碍物的最大尺寸

从 sklearn.cluster 导入 KMeans,DBSCAN 导入 numpy 作为 np

obstacle_list = [[0, 0], [0, 1], [1, 0], [1, 1], [3, 3], [4, 3],[3,4]]
obstacle_array = np.array(obstacle_list) # for easier handling

#if you know the number of obstacles
number_of_obstacles=2
cluster_values = KMeans(n_clusters=number_of_obstacles).fit_predict(obstacle_array)
print(cluster_values) # those are the cluster MeanShift found

#if you know the maximal size of an obstacle
max_size_of_obstacle = 3
db_values = DBSCAN(eps=max_size_of_obstacle).fit_predict(obstacle_array)
print(cluster_values)# those are the cluster DBSCAN found

如果您希望它仅由可能在中心某处的 1 个点表示),您可以遍历cluster_values来计算它。我会取 x 和 y 值的平均值,但您的数据似乎只是整数,所以您可能想要取其他值。


推荐阅读