🎯 До ЕГЭ по информатике:
--дней
:
--часов
:
--минут
:
--секунд
27

Кластеризация

Разбиение на кластеры, поиск центра тяжести. Евклидово расстояние.

Python
from math import dist
cl1 = []; cl2 = []
for i in open('27'):
    x, y = [float(x) for x in i.split()]
    if y < 5: cl1.append([x,y])
    if y > 5: cl2.append([x,y])

def center(cl):
    mn = []
    for p1 in cl:
        s = sum(dist(p1,p2) for p2 in cl)
        mn.append([s, p1])
    return min(mn)[1]

print(center(cl1))
print(center(cl2))
Способ 2
# Кластеризация с N кластерами (k-means)
from math import dist
pts = []
for line in open('27'):
    x, y = map(float, line.split())
    pts.append((x, y))

# Сортируем и делим на 2 кластера
pts.sort(key=lambda p: p[1])
mid = len(pts) // 2
cl1, cl2 = pts[:mid], pts[mid:]

# Центр масс кластера
def centroid(cl):
    cx = sum(p[0] for p in cl) / len(cl)
    cy = sum(p[1] for p in cl) / len(cl)
    return (cx, cy)
print(centroid(cl1))
print(centroid(cl2))

📚 Теория

Кластерный анализ. Метод ближайшего соседа, центроиды.