Est la “norme” est équivalent à “distance Euclidienne”?
Je ne suis pas sûr que la "norme" et de "distance Euclidienne" signifient la même chose. S'il vous plaît pourriez-vous m'aider avec cette distinction.
J'ai un n
par m
tableau a
, où m
> 3. Je veux calculer le Eculidean distance entre le deuxième point de données a[1,:]
à tous les autres points (y compris lui-même). J'ai donc utilisé le np.linalg.norm
, qui sort de la norme de deux points donnés. Mais je ne sais pas si c'est la bonne façon de faire de l'EDs.
import numpy as np
a = np.array([[0, 0, 0 ,0 ], [1, 1 , 1, 1],[2,2, 2, 3], [3,5, 1, 5]])
N = a.shape[0] # number of row
pos = a[1,:] # pick out the second data point.
dist = np.zeros((N,1), dtype=np.float64)
for i in range(N):
dist[i]= np.linalg.norm(a[i,:] - pos)
OriginalL'auteur Jiajun Yang | 2015-08-21
Vous devez vous connecter pour publier un commentaire.
Un norme est une fonction qui prend un vecteur en entrée et retourne une valeur scalaire qui peut être interprété comme la "taille", "longueur" ou "grandeur" de ce vecteur. Plus formellement, les normes sont définies comme étant les suivants propriétés mathématiques:
La norme Euclidienne (aussi connu comme la norme L2) est juste un de beaucoup de différentes normes, il y a aussi le max de norme, de la Manhattan norme etc. La norme L2 d'un seul vecteur est l'équivalent de la distance Euclidienne à partir de ce point d'origine, et la norme L2 de la différence entre les deux vecteurs est l'équivalent de la distance Euclidienne entre deux points.
Comme @nobar's réponse dit,
np.linalg.norm(x - y, ord=2)
(ou justenp.linalg.norm(x - y)
) vous donnera la distance Euclidienne entre les vecteursx
ety
.Puisque vous voulez calculer la distance Euclidienne entre
a[1, :]
et toutes les autres lignes dea
, vous pouvez le faire beaucoup plus rapidement en éliminant lesfor
boucle et la diffusion sur les lignes dea
:Il est également facile de calculer la distance Euclidienne vous-même à l'aide de la radiodiffusion:
La méthode la plus rapide est probablement
scipy.spatiales.distance.cdist
:Certains horaires pour un (1000, 1000) tableau:
OriginalL'auteur ali_m
Le concept de "norme" est généralisée idée en mathématiques, qui, appliquée aux vecteurs (ou vecteur des différences), largement représente une mesure de longueur. Il existe différentes approches pour le calcul d'une norme, mais la distance Euclidienne est appelé le "2-norme" et est basée sur l'application d'un exposant de 2 (le "carré"), et après sommation de l'application d'un exposant de 1/2 (la "racine carrée").
C'est un peu cryptique dans les docs, mais vous obtenez la distance Euclidienne entre deux vecteurs, le paramètre
ord=2
.devient
sqrt(sum(x**2))
.Remarque: comme l'a souligné @Holt, la valeur par défaut est
ord=None
, qui est documenté pour calculer le "2-norme" pour les vecteurs. C'est donc équivalent àord=2
(distance Euclidienne).None
valeur.Merci, je n'avais pas remarqué. La valeur par défaut est
None
qui calcule le "2-norme", sans doute correspondanceord=2
.OriginalL'auteur nobar