nq1s788

27 k-means

Mar 4th, 2026
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.01 KB | None | 0 0
  1. from math import dist
  2. data = open('').readlines()[1:]
  3. n = len(data)
  4. for i in range(n):
  5.     #data[i] = list(map(int, data[i].split()))
  6.     data[i] = list(map(float, data[i].replace(',', '.').split()))
  7. cen = [(3.0, 2.5), (1.4, 5), (3.5, 0.2)]
  8. delta = 10^-4
  9. for _ in range(50):
  10.     prev_cen = cen.copy()
  11.     cl = [[], [], []]
  12.     for e in data:
  13.         rst = [dist(e, cen[0]), dist(e, cen[1]), dist(e, cen[2])]
  14.         cl[rst.index(min(rst))].append(e)
  15.     for i in range(3):
  16.         c = (-1, -1)
  17.         mn_rst = 100000000000000
  18.         for cur_c in cl[i]:
  19.             rst = 0
  20.             for e in cl[i]:
  21.                 rst += dist(cur_c, e)
  22.             if rst < mn_rst:
  23.                 c = cur_c
  24.                 mn_rst = rst
  25.         cen[i] = c
  26.     cur_detla = max(dist(prev_cen[0], cen[0]), dist(prev_cen[1], cen[1]), dist(prev_cen[1], cen[1]))
  27.     if cur_detla < delta:
  28.         break
  29. print(int(((cen[0][0] + cen[1][0] + cen[2][0]) / 3) * 10000), int(((cen[0][1] + cen[1][1] + cen[2][1]) / 3) * 10000))
Advertisement
Add Comment
Please, Sign In to add comment