通过欧几里德距离从 numpy 数组的平均值中选择最接近的值
Selecting closest values by Euclidian distance from the mean from a numpy array
我确信对此有一个简单的答案,但我是一个 Python 新手,拖网 Whosebug 让我非常接近但在最后的障碍中落下,所以道歉。我有一个一维数组的数组(实际上由> 2000个数组组成,每个数组约800个值),但为了表示的缘故:
group = [[0,1,3,4,5],[0,2,3,6,7],[0,4,3,2,5],...]
我正在尝试 select 最近的 n 一维数组的平均值(通过欧几里得距离),但很难从原始列表中提取它们.我可以算出距离并对它们进行排序,但无法从原始组中提取它们。
# 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
任何关于如何 select 从 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)))
我确信对此有一个简单的答案,但我是一个 Python 新手,拖网 Whosebug 让我非常接近但在最后的障碍中落下,所以道歉。我有一个一维数组的数组(实际上由> 2000个数组组成,每个数组约800个值),但为了表示的缘故:
group = [[0,1,3,4,5],[0,2,3,6,7],[0,4,3,2,5],...]
我正在尝试 select 最近的 n 一维数组的平均值(通过欧几里得距离),但很难从原始列表中提取它们.我可以算出距离并对它们进行排序,但无法从原始组中提取它们。
# 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
任何关于如何 select 从 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)))