计算数组中所有点与二维另一个点之间的距离

时间:2019-02-14 05:58:10

标签: python python-3.x distance

我有一个二维点,让我们称之为

p1 = (x,y)

和点数组

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

我想构建一个数组,用于计算p2中每个条目与点p1之间的距离。接下来,我需要找到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 nd y坐标的问题。

2 个答案:

答案 0 :(得分:1)

通常,您使用scipy的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])。

答案 1 :(得分:0)

如果您想在不使用任何包装的情况下计算距离并找到最小的距离,则可以尝试类似的操作

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)