Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf -*-
- # --------------------------------------------- #
- # Universidad Autónoma de Nuevo León #
- # Facultad de Ingeniería Mecánica y Eléctrica #
- # Sistemas Adaptativos #
- # Xavier Fernando Sánchez Díaz #
- # 1540717 #
- # --------------------------------------------- #
- import math
- def distancia(p, c):
- """ Devuelve la distancia euclidiana entre un punto p y el centroide c """
- p1_x = float(p[0])
- p1_y = float(p[1])
- p2_x = float(c[0])
- p2_y = float(c[1])
- return math.sqrt(math.pow((p2_x - p1_x),2) + math.pow((p2_y - p1_y),2))
- def nuevo_centroide(grupo):
- """ Devuelve la posicion del nuevo centroide """
- n = float(len(grupo))
- c = []
- sumx = 0
- sumy = 0
- for i in range(int(n)):
- sumx = sumx + grupo[i][0]
- sumy = sumy + grupo[i][1]
- cx = float(sumx / n)
- cy = float(sumy / n)
- c.append(cx)
- c.append(cy)
- return c
- #Arreglos auxiliares
- puntos = []
- grupoA = []
- grupoB = []
- #Puntos Iniciales
- puntos.append([1,1])
- puntos.append([2,4])
- puntos.append([3,2])
- puntos.append([7,2])
- puntos.append([8,3])
- #Centroides Iniciales
- c1 = [3,5]
- c2 = [9,1]
- #Proceso
- it = int(raw_input("Repeticiones? --> ")) #No. de iteraciones del algoritmo
- for it in range(it):
- for i in range(len(puntos)):
- if (distancia(puntos[i], c1) < distancia(puntos[i], c2)):
- grupoA.append(puntos[i])
- else:
- grupoB.append(puntos[i])
- print "El centroide 1 es: " + str(c1)
- print "El centroide 2 es: " + str(c2)
- print "\nVuelta #%d" % (it+1)
- print "\n\nEl grupo A es: " + str((grupoA))
- print "El grupo B es: " + str((grupoB))
- c1 = nuevo_centroide(grupoA)
- c2 = nuevo_centroide(grupoB)
- print ("\nLos nuevos centroides son:")
- print (c1)
- print (c2)
- print "--------------------------------------------"
- #Borra los grupos para poder recalcularlos
- grupoA[:] = []
- grupoB[:] = []
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement