function [ d ] = hcompare_KL(h1,h2)
%This routine evaluates the Kullback-Leibler (KL) distance between histograms.
% Input: h1, h2 - histograms
% Output: d – the distance between the histograms.
% Method: KL is defined as:
% Note, KL is not symmetric, so compute both sides.
% Take care not to divide by zero or log zero: disregard entries of the sum for which with H2(i) == 0.
temp = sum(h1 .* log(h1 ./ h2));
temp(isinf(temp)) = 0; % this resloves where h1(i) == 0
d1 = sum(temp);
temp = sum(h2 .* log(h2 ./ h1)); % other direction of compare since it's not symetric
temp(isinf(temp)) = 0;
d2 = sum(temp);
d = d1 + d2;
end
il mio problema è che ogni volta che h1 (i) o h2 (i) == 0 sto ottenendo inf che è come previsto. tuttavia nella distanza KL suppongo di restituire 0 ogni volta che h1 o h2 == 0 come posso farlo senza usare un ciclo?Kullback-Leibler (KL) distanza tra istogrammi - matlab
E 'davvero difficile per aiutarti se non chiedere di meglio domande. Non riesco a trovare il tuo errore neanche se non so cosa dovrebbe fare il programma in primo luogo. Si prega di suggerire un esempio di input, dicci quale output ti aspetti e cosa va storto. La funzione genera un errore? La funzione non restituisce ciò che vuoi? Ho sviato la tua domanda, anche se sono felice di rivedere il mio voto se la domanda migliora. – Jonas
ciao @ Jonas grazie per le risposte quotidiane come puoi vedere sto imparando mentre andiamo. lasciatemi specificare la mia domanda più tardi, mi dispiace e grazie – Gilad
@jonas ho modificato la mia domanda, per favore, guardatela, supponiamo di avere h1 = [0: 9] e h2 = [1:10] come input otterrò un errore quando ho 0 come input .. log (0) – Gilad