Я бы порекомендовал вам не использовать map
в качестве имени переменной, так как есть функция с таким же именем. Ваша проблема в жанре - найти кластеры, которые похожи на проблему в вашей ссылке, но на основе данных k-Dtree может быть не лучшим. Я бы порекомендовал другой алгоритм кластеризации из scikit :
- KMeans, если вы знаете количество препятствий
- DBSCAN, если вы знаете максимальный размер препятствия
из sklearn.cluster import KMeans, DBSCAN import 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 точкой, вероятно, где-то в центре) вы можете l oop вместо cluster_values
вычислить его. Я бы взял средние значения x и y, но ваши данные кажутся целыми числами, поэтому вы можете взять что-нибудь еще.