计算(欧几里得)最近邻=(x,y,z)数组的列表1

问题描述 投票:0回答:1

问题:如何为数组中的每个点有效地计算最近邻的(欧式)距离。

我有一个(X,Y,Z)点的列表,我想计算一个最近邻距离的列表。距离的索引将对应于该点的索引。

我调查了PYOD和sklearn邻居,但是这些邻居似乎需要“教学”。我认为我的问题比这简单。对于每个点:找到最近的邻居,计算距离。

例如:

            X           Y             Z
samp_A -0.003467119 -0.01422762 -0.0101960126
samp_B -0.007279433  0.01651597  0.0045558849
samp_C -0.005392258  0.02149997  0.0177409387
samp_D -0.017898802  0.02790659  0.0006487222
samp_E -0.013564214  0.01835688  0.0008102952
samp_F -0.013375397  0.02210725 -0.0286032185

计算k = 1最近的邻居距离

              min distance
    samp_A       d1
    samp_B       d2
    samp_C       d3
python knn nearest-neighbor euclidean-distance
1个回答
0
投票

怎么样?

from scipy.spatial import distance

A = (0.003467119 ,0.01422762 ,0.0101960126)
B = (0.007279433  ,0.01651597  ,0.0045558849)
C = (0.005392258  ,0.02149997  ,0.0177409387)
D = (0.017898802  ,0.02790659  ,0.0006487222)
E = (0.013564214  ,0.01835688  ,0.0008102952)
F = (0.013375397  ,0.02210725 ,0.0286032185)

points = [A, B, C, D, E, F]
results = []
for point in points:
    distances = [{'point':point, 'neighbor':p, 'd':distance.euclidean(point, p)} for p in points if p != point]
    results.append(min(distances, key=lambda k:k['d']))

结果将是对象列表,如下所示:

results = [
    {'point':(x1, y1, z1), 'neighbor':(x2, y2, z2), 'd':"distance from point to neighbor"},
...]

point是参考点,neighbor是该点的最近邻居。

© www.soinside.com 2019 - 2024. All rights reserved.