def group_by_proximity(self, k=10):
if len(self.points) == 0:
return {}
X = numpy.array([[p.lat, p.lon] for p in self.points])
distance_matrix = distance.squareform(distance.pdist(X))
db = KMeans(n_clusters=k).fit(distance_matrix)
# re-attach ids
grouped_points = {}
for i, k in enumerate(db.labels_):
logger.debug('idx, label [%s, %s]', i, k)
if k not in grouped_points:
grouped_points[k] = []
point = self.points[i]
grouped_points[k].append({'id': point.uid, 'lat': point.lat, 'lon': point.lon})
logger.info('Finished grouping into %d groups.', len(grouped_points))
return grouped_points
评论列表
文章目录