如何在二维列表中合并近似点 python

问题描述 投票:0回答:1

我在合并Voronoi图的近点时遇到了麻烦,情况是这样的。

  1. 我从图像中载入一张地图
  2. 地图转换为只包含点的数组,意味着障碍物。
  3. 从这个数组中计算出Voronoi图。

那么问题是我的顶点在 "障碍物 "里面,如图所示。enter image description here

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

点的列表看起来类似于这样。

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

我想把一组点合并成一个点 I want to take a group of points and merge these points into one.

我发现这个 numpy-2D(矢量化)中近点的快速熔合。

我不知道如何将这些点融合在一起,考虑到不是 "点状 "的障碍物。

python numpy voronoi kdtree
1个回答
0
投票

我建议你不要 map 作为变量名,因为有一个同名的函数。你在genreal中的问题是寻找聚类,这和你链接中的问题很相似,但根据数据k-Dtree可能不是很好。我建议使用其他的聚类算法,从 采集器:

  • Kmeans,如果你知道障碍物的数量的话
  • DBSCAN,如果你知道障碍物的最大尺寸。

从sklearn.cluster import KMeans, DBSCANimport numpy as 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值的平均值,但你的数据似乎只有整数,所以你可能想取其他的东西。

© www.soinside.com 2019 - 2024. All rights reserved.