Solución ejercicio distancias
A continuación, te presento un ejercicio que plantea 8 puntos en el plano cartesiano. Calcularemos las distancias entre todos los pares de puntos y determinaremos cuáles están más alejados entre sí y cuáles están más cercanos, utilizando las distancias Euclidiana, Manhattan y Chebyshev.
Ejercicio: Determinación de Distancias entre Puntos
Puntos en el Plano
Los puntos en el plano son los siguientes:
- Punto A: (2, 3)
- Punto B: (5, 4)
- Punto C: (1, 1)
- Punto D: (6, 7)
- Punto E: (3, 5)
- Punto F: (8, 2)
- Punto G: (4, 6)
- Punto H: (2, 1)
Código en Python para el Ejercicio
A continuación se presenta el código en Python que calcula las distancias entre estos puntos y determina cuáles son los más cercanos y más lejanos según cada tipo de distancia:
import numpy as np import pandas as pd from scipy.spatial import distance # Definimos los puntos puntos = { 'Punto A': (2, 3), 'Punto B': (5, 4), 'Punto C': (1, 1), 'Punto D': (6, 7), 'Punto E': (3, 5), 'Punto F': (8, 2), 'Punto G': (4, 6), 'Punto H': (2, 1) } # Convertimos los puntos a un DataFrame df_puntos = pd.DataFrame(puntos).T df_puntos.columns = ['X', 'Y'] print("Coordenadas de los puntos:") # Inicializamos un DataFrame para almacenar las distancias distancias = pd.DataFrame(index=df_puntos.index, columns=df_puntos.index) # Cálculo de distancias for i in df_puntos.index: for j in df_puntos.index: if i != j: # No calcular la distancia a sí mismo # Distancia Euclidiana euclidiana = distance.euclidean(df_puntos.loc[i], df_puntos.loc[j]) # Distancia Manhattan manhattan = distance.cityblock(df_puntos.loc[i], df_puntos.loc[j]) # Distancia Chebyshev chebyshev = distance.chebyshev(df_puntos.loc[i], df_puntos.loc[j]) print(i, j) # Almacenar las distancias en el DataFrame distancias.loc[i, j] = (euclidiana, manhattan, chebyshev) # Función para encontrar los puntos más cercanos y más lejanos def encontrar_extremos(distancias, posicion): mayor = ("", float('-inf')) menor = ("", float('inf')) for i in distancias.index: for j in distancias.columns: if i != j: # Evitar calcular la distancia a sí mismo # Obtener las distancias distancia = distancias.loc[i, j][posicion] # Actualizar resultados para la distancia Euclidiana if distancia >mayor[1]: mayor = (i + " - " + j, distancia) if distancia <menor[1]: menor = (i + " - " + j, distancia) return (menor, mayor) # Mostrar resultados print("\nPuntos más cercanos y más lejanos según la distancia Euclidiana:") resultados = encontrar_extremos(distancias, 0) print( f"Cercanos: {resultados[0][0]} con distancia {resultados[0][1]:.4f}") print( f"Cercanos: {resultados[1][0]} con distancia {resultados[1][1]:.4f}") print("\nPuntos más cercanos y más lejanos según la distancia Manhattan:") resultados = encontrar_extremos(distancias, 1) print( f"Cercanos: {resultados[0][0]} con distancia {resultados[0][1]:.4f}") print( f"Cercanos: {resultados[1][0]} con distancia {resultados[1][1]:.4f}") print("\nPuntos más cercanos y más lejanos según la distancia Chebyshev:") resultados = encontrar_extremos(distancias, 2) print( f"Cercanos: {resultados[0][0]} con distancia {resultados[0][1]:.4f}") print( f"Cercanos: {resultados[1][0]} con distancia {resultados[1][1]:.4f}")
Descripción del Código
- Definición de Puntos: Se definen las coordenadas de 8 puntos en el plano cartesiano.
- Conversión a DataFrame: Se convierten las coordenadas de los puntos a un DataFrame de
pandas
para facilitar la manipulación de datos. - Inicialización de Distancias: Se inicializa un DataFrame vacío para almacenar las distancias entre todos los pares de puntos.
- Cálculo de Distancias: Se utilizan bucles anidados para calcular las distancias entre todos los pares de puntos usando las distancias Euclidiana, Manhattan y Chebyshev.
- Función para Encontrar Extremos: Se define una función que busca y retorna los pares de puntos más cercanos y más lejanos para cada tipo de distancia.
- Impresión de Resultados: Se imprimen los resultados, mostrando cuáles son los puntos más cercanos y más lejanos para cada tipo de distancia.
Resultados Esperados
Al ejecutar el código, obtendrás una tabla que muestra las coordenadas de los puntos y los pares más cercanos y más lejanos en función de cada tipo de distancia.
- Distancia Euclidiana: Te mostrará la distancia “en línea recta” entre los puntos.
- Distancia Manhattan: Mostrará la distancia “a lo largo de los ejes” en un grid.
- Distancia Chebyshev: Te mostrará la distancia máxima en cualquiera de las dimensiones.
Este ejercicio ilustra cómo calcular y comparar diferentes tipos de distancias entre varios puntos en un plano cartesiano, así como la identificación de los puntos más cercanos y más lejanos según diferentes métricas.