Евклидово расстояние между двумя векторами (однорядная матрица)

У меня есть два вектора (однорядные матрицы). Предположим, что мы уже знаем длину len.

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

Чтобы вычислить эвклидовое расстояние между ними, что является самым быстрым методом. Моя первая попытка:

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

Я использую эти методы миллионы раз. Итак, я ищу что-то быстрое и правильное. Обратите внимание, что я не использую MATLAB и не имею доступного API pdist2.

Ответ 1

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

или

distance = norm(A - B);

Ответ 2

[val idx]    =  sort(sum(abs(Ti-Qi)./(1+Ti+Qi)));   

или

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

Val - это значение, а idx - исходное значение индекса для столбца, отсортированного после применения евклидова расстояния. (Код Matlab)

Ответ 3

Чтобы добавить к ответу @kol,

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

или

distance = norm(A-B);