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: P>
A: [(1,1), (2,1), (3,1)] P>
B: [(2,2), (3,3)] P>
La sortie sera de 3 distances: p>
min ((1,1) -> (2,2), (1,1) -> (3,3)), P>
min ((2,1) -> (2,2), (2,1) -> (3,3)), P>
min ((3,1) -> (2,2), (3,1) -> (3,3)) p>
-> distance euclidienne p>
La partie difficile est de faire un code efficace. P>
3 Réponses :
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]
J'ai trouvé un moyen, je ne sais pas si quelqu'un peut le rendre plus efficace,
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 em> prenez la racine carrée. P> Considérez: p> sortie: p> 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) p> p>