#python #python-3.x #numpy
#python #python-3.x #numpy
Вопрос:
Я хочу найти ближайшие точки графика, используя его значения координат (x, y). Мой набор данных похож
-15907.500 -19367.500
-15912.500 -19362.500
-15907.500 -19362.500
-15917.500 -19357.500
-15912.500 -19357.500
-15917.500 -19352.500
-15912.500 -19352.500
-16092.500 -19347.500
. Например, мы можем взять любую точку в качестве эталона, и по этой ссылке мы должны найти ближайшую координату near и еще одну координату небольшого расстояния и тому подобное.
Комментарии:
1. Вы можете использовать евклидово расстояние, чтобы найти ближайшую координату.
2. Не могли бы вы, пожалуйста, предоставить мне несколько ссылок.
3. Вы можете проверить здесь: w3resource.com/python-exercises/math /…
Ответ №1:
data
cols cols1
0 -15907.5 -19367.5
1 -15912.5 -19362.5
2 -15907.5 -19362.5
3 -15917.5 -19357.5
4 -15912.5 -19357.5
5 -15917.5 -19352.5
6 -15912.5 -19352.5
7 -16092.5 -19347.5
from sklearn.metrics.pairwise import euclidean_distances
euclidean_distances(data)
array([[ 0. , 7.07106781, 5. , 14.14213562,
11.18033989, 18.02775638, 15.8113883 , 186.07794066],
[ 7.07106781, 0. , 5. , 7.07106781,
5. , 11.18033989, 10. , 180.62391868],
[ 5. , 5. , 0. , 11.18033989,
7.07106781, 14.14213562, 11.18033989, 185.60711193],
[ 14.14213562, 7.07106781, 11.18033989, 0. ,
5. , 5. , 7.07106781, 175.28548143],
[ 11.18033989, 5. , 7.07106781, 5. ,
0. , 7.07106781, 5. , 180.27756377],
[ 18.02775638, 11.18033989, 14.14213562, 5. ,
7.07106781, 0. , 5. , 175.071414 ],
[ 15.8113883 , 10. , 11.18033989, 7.07106781,
5. , 5. , 0. , 180.06943105],
[186.07794066, 180.62391868, 185.60711193, 175.28548143,
180.27756377, 175.071414 , 180.06943105, 0. ]])
Ссылка:-
Комментарии:
1. Это абсолютно работает, но загрузка и установка
sklearn
только для вычисления евклидова расстояния кажется излишеством.
Ответ №2:
Чтобы вычислить (евклидово) расстояние между двумя точками, вы просто вычитаете их координаты, возводите в квадрат, складываете, извлекаете квадратный корень. Другими словами:
def distance_between(x1, y1, x2, y2):
return sqrt((x1-x2)**2 (y1-y2)**2)
Удобно, что math
модуль предоставляет функцию hypot
, которая делает это за нас (немного более эффективно, поскольку он использует C).
Итак, теперь мы можем сделать это:
from math import hypot
def closest_to(data, target):
x, y = target # Break `target` into coordinates
def distance(other_point): # How far is `other_point` from `target`?
x2, y2 = other_point # Break `other_point` into coordinates
return hypot(x-x2, y-y2) # Then calculate distance
return min(data, key=distance) # Now run through `data` and return whichever one has the lowest `distance` result