Рассчитать расстояние между всеми точками в массиве и другой точкой в ​​двух измерениях - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть двумерная точка, давайте назовем ее

p1 = (x,y)

и массив точек,

p2 = [(x1, y1), (x2, y2), (x3, y3)...]

Я хочу построить массив, который вычисляет расстояние между каждой записьюв р2 и точка р1.Далее мне нужно найти наименьшее расстояние между точкой в ​​p2 и p1 и вернуть исходные координаты в p2.До сих пор я пробовал следующее:

dist1 = np.sqrt(p1.x**2 + p1.y**2)
dist2 = np.sqrt(p2.x**2 + p2.y**2)
dist = dist2-dist1

, который возвращает ошибку "не удалось передать операнды вместе с формами (2,) (1265,)"

Что касается нахожденияминимальное расстояние, я думаю, что мне нужно использовать функцию numpy min следующим образом

import numpy as np
np.min(dist)

Но я застрял в том, как вернуть координаты x и y, как только я вычислю расстояние.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Если вы хотите рассчитать расстояние и найти самое маленькое без использования какого-либо пакета, то вы можете попробовать что-то вроде этого

import sys

minimum_distance = sys.maxsize
minimum_point = (0,0)

for point in p2:
    distance = math.sqrt((p[0] - point[0]) ** 2 + (p[1] - point[1]) ** 2)
    if distance < minimum_distance:
        minimum_distance = distance
        minimum_point = point

print("Point with minimum distance", minimum_point)
0 голосов
/ 14 февраля 2019

Обычно вы используете scipy's cdist для достижения этой цели, но вам нужно указать массивы в другом формате.

Пример:

import numpy as np
from scipy.spatial.distance import cdist

x = np.array([[2,1]])
y = np.array([[1,0], [2,3], [4,3]])

d = cdist(x,y)

И d - массив со всеми расстояниями.

Как правило, при указании наборов точек формат p2 = [(x1, y1), (x2, y2), (x3, y3)...] не очень удобен для манипуляций с такими библиотеками, как numpy / scipy / pandas.Обычно вместо этого вы можете предпочесть np.array([[x1,y1], [x2,y2], [x3,x3]]).

Чтобы получить минимальное расстояние, используйте

idx = np.argmin(d)

idx, которое возвращает значение index массива с минимальным расстоянием (в данном случае, 0).

Так что если вы сделаете y[idx], он вернет точку с минимальным расстоянием (в данном случае [1, 0]).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...