Различное поведение для 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
,