Compute L1 distance between matrices in fast way

4 views (last 30 days)
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 Comments
Walter Roberson
Walter Roberson on 20 Dec 2012
Jan, put your cursor on the text entry box without anything selected, and press the {} Code button...
Jan
Jan on 21 Dec 2012
@Walter: Thank you very much. This is revelation.

Sign in to comment.

Accepted Answer

Matt J
Matt J on 20 Dec 2012
norm(a-b,1);
  2 Comments
nedo nodo
nedo nodo on 30 Jan 2013
|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
Matt J
Matt J on 30 Jan 2013
Looks fine, assuming B is a row vector.

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!