从numpy数组中按欧几里得距离选择最接近的值



我相信有一个直接的答案,但我是一个非常Python的新手,拖网stackoverflow让我非常接近,但在最后的障碍,所以道歉。我有一个一维数组的数组(实际上由2000个数组组成,每个数组有800个值),但是为了表示方便:

group = [[0,1,3,4,5],[0,2,3,6,7],[0,4,3,2,5],...]

我试图选择最接近均值的n1-d数组(通过欧几里得距离),但难以从原始列表中提取它们。我可以计算出距离并对它们进行排序,但无法从原始组中提取它们。

# Compute the mean
group_mean = group.mean(axis = 0)

distances = []
for x in group:
# Compute Euclidian distance from the mean
distances.append(np.linalg.norm(x - group_mean))
# Sort distances
distances.sort()
print(distances[0:5]) # Prints the five nearest distances

关于如何从group中选择出与最近距离相对应的五个(或任何)数组的任何建议将不胜感激。

您可以将数组与dist数组放在一起,并根据与平均值的距离进行排序:

import numpy as np 
group = np.array([[0,1,3,4,5],[0,2,3,6,7],[0,4,3,2,5]])
group_mean = group.mean(axis = 0)
distances = [[np.linalg.norm(x - group_mean),x] for x in group]
distances.sort(key=lambda a : a[0])
print(distances[0:5]) # Prints the five nearest distances

如果数组变大,只保存索引而不是保存整个数组可能是明智的:

distances = [[np.linalg.norm(x - group_mean),i] for i,x in enumerate(group)]

如果你不想保存距离本身,而只是想根据距离进行排序,你可以这样做:

group = list(group)
group.sort(key=lambda group: np.linalg.norm(group - np.mean(group)))

最新更新