Различное поведение для pdist и pdist2

В коде MATLAB я использую kullback_leibler_divergence функция различий, которую можно найти здесь.

У меня есть матрица A и я вычисляю матрицу различий, используя загруженную функцию.

В теории, если я вычислю

clear
A = rand(132,6); % input matrix
diss_mat = pdist(A,'@kullback_leibler_divergence'); % calculate the dissimilarity
square_diss_mat = squareform(diss_mat); % I put the dissimilarities in a square matrix
one_dist = pdist2(A(1,:),A,@kullback_leibler_divergence);

Я должен получить первый ряд square_diss_mat равно one_dist, но я нет.

Если я использую евклидово расстояние, я получаю это:

diss_mat = pdist(A);
square_diss_mat = squareform(diss_mat);
one_dist = pdist2(A(1,:),A); 

Не могли бы вы сказать мне, почему?

1 ответ

Решение

kullback_leibler_divergence не является симметричным, поэтому порядок имеет значение:

one_dist = pdist2(A, A(1,:), @kullback_leibler_divergence);

Я не вижу практического применения с использованием несимметричной функции с pdist или же pdist2,

Другие вопросы по тегам