Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import dist
- data = open('27.txt').readlines()
- a = []
- for e in data:
- x, y = map(float, e.replace(',', '.').split())
- a.append((x, y))
- cen = [(-7.9, -4.9), (-3.5, 7.2), (3.6, 8.0)]
- cluster = [[], [], []]
- for _ in range(100):
- for e in a:
- if dist(e, cen[0]) < dist(e, cen[1]) and dist(e, cen[0]) < dist(e, cen[2]):
- cluster[0].append(e)
- elif dist(e, cen[1]) < dist(e, cen[0]) and dist(e, cen[1]) < dist(e, cen[2]):
- cluster[1].append(e)
- else:
- cluster[2].append(e)
- #### альтернативный вариант вместо ифов
- #dis = [dist(e, cen[0]), dist(e, cen[1]), dist(e, cen[2])]
- #cluster[dis.index(min(dis))].append(e)
- new_cen = []
- for i in range(3):
- best_c = (-1, -1)
- best_rst = 100000000
- for c in cluster[i]:
- rst = 0
- for e in cluster[i]:
- rst += dist(e, c)
- if rst < best_rst:
- best_rst = rst
- best_c = c
- new_cen.append(best_c)
- if new_cen == cen:
- cen = new_cen
- break
- cen = new_cen
- rx = abs(sum(c[0] for c in cen)) / 3
- ry = abs(sum(c[1] for c in cen)) / 3
- print(int(rx * 10000), int(ry * 10000))
Advertisement
Add Comment
Please, Sign In to add comment