Compute L1 distance between matrices in fast way

Hi,
I have to compute the L1 distance (Manhattan distance) between matrices. Is there a fast way that avoid to use for loop? I have found this code for euclidean distance
if true
aa=sum(a.*a,2); bb=sum(b.*b,2); ab=a*b';
d = sqrt(abs(repmat(aa,[1 size(bb,1)]) + repmat(bb',[size(aa,1) 1]) - 2*ab));
end
Thank you

3 Commenti

Jan
Jan il 20 Dic 2012
Modificato: Jan il 20 Dic 2012
Could someone please reveal to me, why some users enclose their codes into "if true, ..., end"? This might be a strange kind of block commenting. But when posting in a forum such lines are such useless, that I'm puzzled by reading it so often.
Jan, put your cursor on the text entry box without anything selected, and press the {} Code button...
@Walter: Thank you very much. This is revelation.

Accedi per commentare.

 Risposta accettata

norm(a-b,1);

2 Commenti

|monospacedYour solution works only if a,b have the same dimension. If a is a matrix and b is a vector how can I do?
My idea is: N=sum((abs(bsxfun(@minus,A,B)).^p),2).^(1/p);
Thank you
Looks fine, assuming B is a row vector.

Accedi per commentare.

Più risposte (0)

Categorie

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by