In a MATLAB code I am using the kullback_leibler_divergence dissimilarity function that can be found here.
I have a matrix A and I compute the dissimilarity matrix using the downloaded function.
In theory, if I calculate
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);
I should get the first row of square_diss_mat equal to one_dist, but I am not.
If I use the Euclidean distance I get it:
diss_mat = pdist(A);
square_diss_mat = squareform(diss_mat);
one_dist = pdist2(A(1,:),A);
Could you please tell me why?
The
kullback_leibler_divergenceis not symmetric, thus the order matters:I don't see any practical application using a non-symmetric function with
pdistorpdist2.