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
pandaspara 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.