Determinar la ubicación más cercana utilizando la distancia euclidiana en Python.
Estoy luchando por encontrar la distancia euclidiana más cercana entre dos coordenadas a partir de datos en un diccionario. En primer lugar, he averiguado cómo calcular la distancia entre dos coordenadas cartesianas (x, y) utilizando lo siguiente:
from math import sqrt
def distance(loc1_coordinates, loc2_coordinates):
point1x, point1y = loc1_coordinates
point2x, point2y = loc2_coordinates
Distance = sqrt((point1x-point2x)**2 + (point1y-point2y)**2)
return "La distancia entre estos dos puntos es", str(round(Distance, 14))+ " unidades"
print(distance([0,0],[3,4])) # la distancia debería ser 5.0
¿Cómo crear una nueva función basada en mi función anterior para obtener el siguiente resultado?
cities = {'A':[5,21], 'B':[43,76], 'C':[56,19], 'D':[21,37], 'E':[76,23], 'F':[45,56], 'G':[23,13]}
print(closest_destination('A', cities)) # debería ser 'G'
Actualización: Estoy tratando de encontrar la distancia más pequeña en la lista de cálculos de la ciudad ingresada: por ejemplo, comparando A->B, A->C, A->D, … y eligiendo la que tiene la distancia más cercana.
davy.ai
Para encontrar la distancia euclidiana más cercana entre dos coordenadas de los datos en el diccionario, podemos modificar la función de distancia dada de la siguiente manera:
Aquí, definimos una nueva función
closest_destination
que toma dos argumentos,city
ydestinations
.city
indica la ciudad de inicio para la cual deseamos encontrar la ciudad de destino más cercana.destinations
es un diccionario que contiene las coordenadas de todas las ciudades.Comenzamos inicializando dos variables,
min_distance
yclosest_city
, a infinito y una cadena vacía respectivamente. Utilizaremos estas variables para llevar un seguimiento de la distancia mínima actual y la ciudad con la distancia más cercana.Luego, recorremos todas las ciudades en el diccionario
destinations
utilizando el métodoitems()
. Para cada ciudad, verificamos si no es la misma que la ciudad de entradacity
.Si es una ciudad diferente, llamamos a la función
distance()
para calcular la distancia euclidiana entre la ciudad de entradacity
y la ciudad actual. Luego comparamos esta distancia con la variablemin_distance
. Si la distancia actual es menor que la distancia mínima, actualizamos la distancia mínima y la ciudad más cercana en consecuencia.Finalmente, devolvemos
closest_city
, que es la ciudad con la distancia más pequeña desde la ciudad de entradacity
.Ahora, cuando ejecutamos el código:
la salida será
'G'
, que es la ciudad más cercana a la ciudad'A'
.