def add_arrow(self, start, end): self._pylab.gca().add_patch( pylab.Arrow(start[0], start[1], end[0] - start[0], end[1] - start[1], width=0.1))
interpolation='nearest', extent=(mx.min(), mx.max(), my.min(), my.max()), cmap=pylab.cm.Blues, aspect='auto', origin='lower') c2a, c2b, c2c = km.cluster_centers_ pylab.scatter(km.cluster_centers_[:, 0], km.cluster_centers_[:, 1], marker='x', linewidth=2, s=100, color='black') # import pdb;pdb.set_trace() pylab.gca().add_patch( pylab.Arrow(c1a[0], c1a[1], c2a[0] - c1a[0], c2a[1] - c1a[1], width=0.1)) pylab.gca().add_patch( pylab.Arrow(c1b[0], c1b[1], c2b[0] - c1b[0], c2b[1] - c1b[1], width=0.1)) pylab.gca().add_patch( pylab.Arrow(c1c[0], c1c[1], c2c[0] - c1c[0], c2c[1] - c1c[1], width=0.1)) pylab.savefig(os.path.join("..", "1400_03_0%i.png" % i)) pylab.clf() i += 1 #################### 3 iterations #################### km = KMeans(init='random', n_clusters=num_clusters, verbose=1, n_init=1,
def kmeans_simple(F, P): # N : Numero total de objetos # M : Numero de caracteristicas N, M = F.shape # Critério de parada m = np.Inf m_min = 0.01 # Contador i = 0 while m > m_min: print '----------' print 'Iteracao ', i, # Calcula a matriz de distancias inicial (D): D = distance.cdist(F, P, metric='euclidean') print '\nMatriz de distancias(D):' print D # Objetos mais proximos do vetor 1 L1 = F[D[:, 0] <= D[:, 1]] # Objetos mais proximos do vetor 2 L2 = F[D[:, 0] > D[:, 1]] # --- Print --- print '\nPontos em #1:' print L1 print '\nPontos em #1:' print L2 # Armazena valores dos vetores na ultima iteracao P_old = P.copy() # Move os vetores de prototipo P = np.zeros([2, M]) P[0, :] = L1.mean() P[1, :] = L2.mean() # --- PRINT --- print '\nP_old:' print P_old print '\nP: ' print P # Distancia entre a posicao dos vetores atual e anterior. m = np.max(np.sqrt(((P_old - P)**2).sum(0))) print 'm: ' print m # Pepara para plotar class_C1 = L1 class_C2 = L2 title = 'K-means. Iteracao ' + str(i) plt.figure() plt.subplot(111) plt.axis('equal') plt.scatter(class_C1[:, 0], class_C1[:, 1], c='red') plt.scatter(class_C2[:, 0], class_C2[:, 1], c='blue') plt.scatter(P_old[0, 0], P_old[0, 1], marker='x', c='red') plt.scatter(P_old[1, 0], P_old[1, 1], marker='x', c='blue') ax = plt.gca() ax.add_patch( plt.Arrow(P_old[0, 0], P_old[0, 1], P[0, 0] - P_old[0, 0], P[0, 1] - P_old[0, 1])) ax.add_patch( plt.Arrow(P_old[1, 0], P_old[1, 1], P[1, 0] - P_old[1, 0], P[1, 1] - P_old[1, 1])) plt.scatter(P[0, 0], P[0, 1], marker='x', c='red') plt.scatter(P[1, 0], P[1, 1], marker='x', c='blue') plt.title(title) plt.xlabel('Caracteristica 0') plt.ylabel('Caracteristica 1') # Mostra as figuras na tela. plt.show() i = i + 1 # --------------------------------------------------------------------- # Calcula a matriz de distancias inicial (D): D = distance.cdist(F, P, metric='euclidean') # Gera valores para o retorno CLASS = np.zeros(N) # Objetos mais proximos do vetor 1 CLASS[D[:, 0] <= D[:, 1]] = 0 # Objetos mais proximos do vetor 2 CLASS[D[:, 0] > D[:, 1]] = 1 # Pepara para plotar class_C1 = F[CLASS == 0, :] class_C2 = F[CLASS == 1, :] plt.figure() plt.subplot(111) plt.axis('equal') plt.scatter(class_C1[:, 0], class_C1[:, 1], c='red') plt.scatter(class_C2[:, 0], class_C2[:, 1], c='blue') plt.scatter(P[0, 0], P[0, 1], marker='x', c='red') plt.scatter(P[1, 0], P[1, 1], marker='x', c='blue') plt.title('K-means. Final.') plt.xlabel('Caracteristica 0') plt.ylabel('Caracteristica 1') # Mostra as figuras na tela. plt.show() return [CLASS, P]
def visualization(robot, pr, factor=7): plt.figure("Robot in the world", figsize=(field.w_width, field.w_length)) plt.title('Particle filter') # draw coordinate grid for plotting grid = [ -field.w_width / 2.0, field.w_width / 2.0, -field.w_length / 2.0, field.w_length / 2.0 ] ax = plt.axis(grid) landmarks = { "blue_posts": [[-1.0, -4.5], [1.0, -4.5]], "yellow_posts": [[-1.0, 4.5], [1.0, 4.5]] } for el in field.field: if el == 'circles': for circle in field.field['circles']: plot_circle = plt.Circle((circle[0], circle[1]), circle[2], linewidth=2, fill=False, edgecolor='#330000') plt.gca().add_patch(plot_circle) if el == 'lines': for line in field.field['lines']: plot_line = plt.Line2D(line[0], line[1], linewidth=2, linestyle="-", color='#330000') plt.gca().add_line(plot_line) if el == 'rectangles': for rectangle in field.field['rectangles']: rect = plt.Rectangle(rectangle[0], rectangle[1], rectangle[2], linewidth=2, linestyle="-", fill=False, edgecolor='#330000') plt.gca().add_patch(rect) ''' # draw particles for ind in range(len(p)): # particle circle = plt.Circle((p[ind][0].x, p[ind][0].y), 1./factor/2, facecolor='#ffb266', edgecolor='#994c00', alpha=0.5) plt.gca().add_patch(circle) # particle's orientation arrow = plt.Arrow(p[ind][0].x, p[ind][0].y, 2*math.cos(p[ind][0].yaw)/factor, 2*math.sin(p[ind][0].yaw)/factor, width=1/factor, alpha=1., facecolor='#994c00', edgecolor='#994c00') plt.gca().add_patch(arrow) ''' # draw resampled particles for ind in range(len(pr)): # particle circle = plt.Circle((pr[ind][0].y, pr[ind][0].x), 1. / factor / 2, facecolor='#ffb266', edgecolor='#cc0000', alpha=0.5) plt.gca().add_patch(circle) # particle's orientation arrow = plt.Arrow(pr[ind][0].y, pr[ind][0].x, 2 * math.sin(pr[ind][0].yaw) / factor, math.cos(pr[ind][0].yaw) / factor, width=1 / factor, alpha=1., facecolor='#006600', edgecolor='#006600') plt.gca().add_patch(arrow) # robot's location circle = plt.Circle((robot.y, robot.x), 1. / factor, facecolor='#FF66E9', edgecolor='#FF66E9') plt.gca().add_patch(circle) # robot's orientation arrow = plt.Arrow(robot.y, robot.x, 3 * math.sin(robot.yaw) / factor, 3 * math.cos(robot.yaw) / factor, width=1.0 / factor, alpha=0.5, facecolor='#000000', edgecolor='#000000') plt.gca().add_patch(arrow) #fixed landmarks of known locations2 for lm in landmarks: for lms in landmarks[lm]: if lm == "yellow_posts": circle = plt.Circle(((lms[0], lms[1])), 1. / factor, facecolor='#ffff00', edgecolor='#330000') plt.gca().add_patch(circle) else: circle = plt.Circle(((lms[0], lms[1])), 1. / factor, facecolor='#060C73', edgecolor='#330000') plt.gca().add_patch(circle)