问题:如何为数组中的每个点有效地计算最近邻的(欧式)距离。
我有一个(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
怎么样?
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
是该点的最近邻居。