我有这个带有点的numpy数组,比如
[(x1,y1), (x2,y2), (x3,y3), (x4,y4), (x5,y5)]
我想做的是获得所有最小距离的数组。
因此,对于第1点(x1, y1)
,我想要距离它最近的点的距离,对于点2 (x2,y2)
等也是如此......
距离为sqrt((x1-x2)^2 + (y1-y2)^2)
。
这显然是一个与我的数组相同长度的数组(在这种情况下:5个点 - > 5个最小距离)。
任何简洁的方法,这样做而不诉诸循环?
答案 0 :(得分:6)
此解决方案真正关注性能的可读性 - 它明确地计算并存储整个n x n
距离矩阵,因此不能被认为是有效的。
但是:它非常简洁易读。
import numpy as np
from scipy.spatial.distance import pdist, squareform
#create n x d matrix (n=observations, d=dimensions)
A = np.array([[1,9,2,4], [1,2,3,1]]).T
# explicitly calculate the whole n x n distance matrix
dist_mat = squareform(pdist(A, metric="euclidean"))
# mask the diagonal
np.fill_diagonal(dist_mat, np.nan)
# and calculate the minimum of each row (or column)
np.nanmin(dist_mat, axis=1)