Compute L1 distance between matrices in fast way

4 ビュー (過去 30 日間)
nedo nodo
nedo nodo 2012 年 12 月 20 日
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 件のコメント
Walter Roberson
Walter Roberson 2012 年 12 月 20 日
Jan, put your cursor on the text entry box without anything selected, and press the {} Code button...
Jan
Jan 2012 年 12 月 21 日
@Walter: Thank you very much. This is revelation.

サインインしてコメントする。

採用された回答

Matt J
Matt J 2012 年 12 月 20 日
  2 件のコメント
nedo nodo
nedo nodo 2013 年 1 月 30 日
|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 2013 年 1 月 30 日
Looks fine, assuming B is a row vector.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by