web-dev-qa-db-fra.com

Distance euclidienne entre deux vecteurs (matrice à une seule ligne)

J'ai deux vecteurs (matrices à une seule rangée). Supposons que nous connaissions déjà la longueur len.

A = [ x1 x2 x3 x4 x5 .... ]
B = [ y1 y2 y3 y4 y5 .... ]

Pour calculer la distance euclidienne entre eux quelle est la méthode la plus rapide. Ma première tentative est:

diff = A - B
sum = 0
for column = 1:len
    sum += diff(1, column)^2
distance = sqrt(sum)

J'ai parcouru cette méthode des millions de fois. Donc, je cherche quelque chose qui est rapide et correct. Notez que je n'utilise pas MATLAB et que je n'ai pas l'API pdist2 disponible.

12
user648129
diff = A - B;
distance = sqrt(diff * diff');

ou

distance = norm(A - B);
32
kol

Pour ajouter à @kol answer, 

diff = A - B;
distance = sqrt(sum(diff * diff')) % sum of squared diff

ou

distance = norm(A-B);
0
phenom_aks
[val idx]    =  sort(sum(abs(Ti-Qi)./(1+Ti+Qi)));   

ou 

[val idx]    =  sort(sqrt(sum((Ti-Qi).^2))); 

Val est la valeur et idx est la valeur d'index d'origine de la colonne en cours de tri après l'application de la distance euclidienne . (Code Matlab)

0
yunas