0
votes

Python - calculer la distance euclidienne minimale de deux listes de points (coordonnées)

J'ai deux listes de formes n et chaque point sera comparé (distance euclidien) à chaque point de la deuxième liste, puis la distance minimale sera choisie, exemple:

A: [(1,1), (2,1), (3,1)]

B: [(2,2), (3,3)]

La sortie sera de 3 distances:

min ((1,1) -> (2,2), (1,1) -> (3,3)),

min ((2,1) -> (2,2), (2,1) -> (3,3)),

min ((3,1) -> (2,2), (3,1) -> (3,3))

-> distance euclidienne

La partie difficile est de faire un code efficace.


0 commentaires

3 Réponses :


1
votes

Voici un exemple de code qui peut aider:

from scipy.spatial import distance

A = [(1,1),(2,1),(3,1)]
B = [(2,2),(3,3)]

min_dist = []
for a in A:
    dist = []
    for b in B:
        dist.append(distance.euclidean(a,b))
    min_dist.append(min(dist))

>> min_dist
>> [1.4142135623730951, 1.0, 1.4142135623730951]


0 commentaires

0
votes

J'ai trouvé un moyen, je ne sais pas si quelqu'un peut le rendre plus efficace, xxx


0 commentaires

0
votes

dépend de ce que vous entendez par "efficace". Si vous avez des listes considérables et que vous allez faire beaucoup de comparaisons, vous devriez simplement rechercher la distance minimale carrée, qui est beaucoup plus rapide à calculer car vous évitez l'opération racine carrée. Ceci est un piratage standard lorsque vous travaillez avec des distances euclidiennes.

Si à la fin, vous voulez la distance euclidienne réelle, alors prenez la racine carrée.

Considérez: xxx

sortie: xxx

Quelle est la grande différence? Le code ci-dessus calcule 3 racines carrées. L'approche naïve calcule 6 (| {b} | fois autant de)


0 commentaires