python numpy calcul de la distance euclidienne entre les matrices des vecteurs ligne
Je suis nouveau sur Numpy et je voudrais vous demander comment faire pour calculer la distance euclidienne entre les points stockés dans un vecteur.
Supposons que nous avons un numpy.tableau, chaque ligne est un vecteur et un seul numpy.tableau. Je voudrais savoir si il est possible de calculer la distance euclidienne entre tous les points et de ce point unique et de les stocker dans un numpy.tableau.
Ici est une interface:
points #2d list of row-vectors
singlePoint #one row-vector
listOfDistances= procedure( points,singlePoint)
Pouvons-nous avoir quelque chose comme ça?
Ou est-il possible d'avoir une commande pour avoir le point unique, comme une liste de points et à la fin nous obtenons une matrice de distances?
Grâce
Bien que vous voulez calculer la distance entre un point et un ensemble de points, je pense que scipy.spatiales.distance.cdist fonctionne toujours. Vous avez 2 collections, l'une de qui ont seulement 1 élément. stackoverflow.com/questions/1871536/...
C'était exactement ce dont j'avais besoin 🙂
C'était exactement ce dont j'avais besoin 🙂
OriginalL'auteur pacodelumberg | 2010-12-06
Vous devez vous connecter pour publier un commentaire.
Alors que vous pouvez utiliser vectoriser, @Karl approche sera plutôt lente avec des tableaux numpy.
L'approche plus facile est de simplement faire de
np.hypot(*(points - single_point).T)
. (La transposition suppose que les points est un Nx2 tableau, plutôt que d'un 2xN. Si c'est 2xN, vous n'avez pas besoin de la.T
.Cependant, c'est un peu illisible, de sorte que vous écrivez plus explicitement comme ceci (à l'aide de quelques conserves de données, par exemple...):
OriginalL'auteur Joe Kington
C'est le même que ci-dessus mais dans une ligne
OriginalL'auteur Dima
Pour obtenir la distance, vous pouvez utiliser la norme de la méthode de la linalg module numpy:
OriginalL'auteur Christian
Appliquer une fonction à chaque élément d'un tableau numpy, essayez numpy.vectoriser.
Pour faire le calcul, nous avons besoin de la racine carrée de la somme des carrés des différences (ouf!) entre les paires de coordonnées de ces deux vecteurs.
Nous pouvons utiliser
zip
à la paire de coordonnées, etsum
avec une compréhension de l'addition des résultats. Qui ressemble à:OriginalL'auteur Karl Knechtel
OriginalL'auteur rombi