
import math # подключение модуля math. import turtle # подключение графического модуля turtle. X=[(5.28,5.26),(6.09,5.83),(5.81,5.86),(6.14,5.80),(5.73,6.17),(5.53,5.50),(15.20,4.88),(13.70,6.55),(14.84,6.25),(13.85,6.18),(14.88,6.26),(13.70,6.15),(14.66,5.17),(-1.62,-0.32),(0.03,0.31),(0.18,-0.31),(-0.89,-0.60),(0.00,0.12),(-0.32,0.09),(-0.33,-0.37),(-0.45,0.63)] def d(x1,x2,w1,w2): #Евклидова мера расстояния return math.sqrt((x1-w1)**2+(x2-w2)**2) w=[(5.28,5.26),(15.20,4.88),(-0.45,0.63)] s=[(0.00,0.12),(6.14,5.80),(-1.62,-0.32)] X1=[] X2=[] X3=[] i=0 while w!=s: #условие выполнения цикла ( пока старые и новые центры не будут совпадать ) for k in X: if d(k[0],k[1],w[0][0],w[0][1])<d(k[0],k[1],w[1][0],w[1][1])and d(k[0],k[1],w[0][0],w[0][1])<d(k[0],k[1],w[2][0],w[2][1]): X1.append(k) for f in X1: turtle.penup() turtle.goto(f[0]*50,f[1]*50) turtle.pendown() turtle.dot(4,"black") elif d(k[0],k[1],w[1][0],w[1][1])<d(k[0],k[1],w[2][0],w[2][1]) and d(k[0],k[1],w[1][0],w[1][1])<d(k[0],k[1],w[2][0],w[2][1]): X2.append(k) for p in X2: turtle.penup() turtle.goto(p[0]*50,p[1]*50) turtle.pendown() turtle.dot(4,"blue") elif d(k[0],k[1],w[2][0],w[2][1])<d(k[0],k[1],w[0][0],w[0][1]) and d(k[0],k[1],w[2][0],w[2][1])<d(k[0],k[1],w[1][0],w[1][1]): X3.append(k) for q in X3: turtle.penup() turtle.goto(q[0]*50,q[1]*50) turtle.pendown() turtle.dot(4,"orange") else: X1.append(k) s=w w=[] #очищаем список из центров кластеров w[0]=[((1/len(X1))*sum(X1[i][0]),(1/len(X1))*sum(X1[i][1]))] w.insert(0, w[0]) w[1]=[(1/len(X2))*sum(X2[0]),(1/len(X2))*sum(X2[1])] w.insert(1,w[1]) w[2]=[(1/len(X3))*sum(X3[0]),(1/len(X3))*sum(X3[1])] w.insert(2,w[2]) X1=[] X2=[] #очищаем списки в конце цикла программы X3=[] i+=1 turtle.mainloop()
1Ответы

Все что удалось найти:
Еще может заинтересовать:
Еще может заинтересовать:

Что означает — sum(X1[i][1])?
При попытке выполнить эту функцию интерпретатор находит, что i имеет какое-то конкретное значение (в вашем случае -0) подставляет его в функцию, получает sum(X1[0][1]). А при этом ожидается нечто итерируемое. О чем он вас и оповещает.
Поиск путей исправления ищете примерно в таком направлении :
sum([(X1[i][1]) for i in range(n)])