No BSD License  

Highlights from
distance.m

4.61111

4.6 | 18 ratings Rate this file 194 Downloads (last 30 days) File Size: 1.28 KB File ID: #71

distance.m

by R. Bunschoten

 

03 Nov 1999

A fully vectorized function that computes the Euclidean distance matrix between two sets of vectors.

| Watch this File

File Information
Description

A fully vectorized function that computes the Euclidean distance matrix between two sets of vectors.

The output is the same as MathWorks' (Neural Network Toolbox) 'dist' funtion (ie, d = dist(A',B), where A is a (DxM) matrix and B a (DxN) matrix, returns the same as my d = distance(A,B) ), but this function executes much faster.

Acknowledgements
This submission has inspired the following:
Efficient K-Nearest Neighbor Search using JIT
MATLAB release MATLAB 5.2 (R10)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (26)
02 Apr 2002 Jan de Vries

Fantastic!

15 Apr 2003 Peter G

useful...good

21 Oct 2003 ti saigon  
07 Mar 2004 imad ali

need the file

09 Apr 2004 Emily Van Ark

great, fast little function. Exactly what I was looking for!

13 May 2004 uday desai  
20 Nov 2004 Hsuan-Tien Lin

great code

02 Mar 2005 Anton Cervantes  
30 Mar 2005 Babak Taati

good!

15 Apr 2005 Catherine Sweeney-Reed

Great! Thanks!

08 Dec 2006 Enrique Guevara

Is a very fast code. Is faster than any other code for any vectors biger that 8 points.

02 Feb 2007 Markus Buehren

Simple but nice. Performance can still be improved by about 60% by avoiding calls to repmat:

d = abs(aa( ones(size(bb,2),1), :)' + bb( ones(size(aa,2),1), :) - 2*a'*b);

Markus

02 Feb 2007 Markus Buehren

Sorry, I forgot the sqrt:

d = sqrt(abs(aa( ones(size(bb,2),1), :)' + bb( ones(size(aa,2),1), :) - 2*a'*b));

17 May 2007 Xi-Lin Li

very good code

Thanks

09 Oct 2007 A. S.

Very useful, especially Markus' version.

21 Nov 2007 M. Shoaib Sehgal

for vectors it simple to compute using:

distance = norm(A-B)

26 Dec 2007 Panyam Narahari Sastry

Good

19 Feb 2008 Philipp Berens

Quick and clean.

What might be nice: Optional only one argument.

25 Nov 2008 Oliver Woodford

Could be faster still by using bsxfun:
d = sqrt(abs(bsxfun(@plus, aa', bb) - 2*a'*b));

07 Apr 2010 fabio freschi

According to Oliver Woodford, on my macbook the fastest is

d = sqrt(bsxfun(@plus,dot(a,a,1)',dot(b,b,1))-2*a'*b);

23 Jun 2010 Stuart Layton

I find the original code to be faster than the method put forth by oliver
~~~~~~
s = 100000; a = rand(5,s); b = rand(5,1); t = []; n = 1000;
disp(['Data Points: ', num2str(s), ' iterations: ', num2str(n)]);
for i=1:n
    tic; d = distance(a,b); t(i) = toc;
end

disp(['Average run time: ', num2str(mean(t))]);
t = [];
for i=1:n
    tic; d = sqrt(bsxfun(@plus,dot(a,a,1)',dot(b,b,1))-2*a'*b); t(i) = toc;
end
disp(['Average run time: ', num2str(mean(t))]);
~~~~~~

Data Points: 100000 iterations: 1000
Average run time: 0.01356
Average run time: 0.020044

11 Jan 2011 George

Why is the -2ab term included?

11 Jan 2011 T. R.  
26 Feb 2011 Andrea Tacchetti

Things can go wrong in extreme cases.
If dimensionality is very high numerical errors will kick in.

I have twenty-five hundred 10'000 dimensional vectors stored in matrix X and

~
sum(diag(distance(X',X'))) = 6e-4;
~

Other than that, great job!

30 Aug 2011 Ali Asghar Torabi

Thanks. using repmat has made it useful and fast.

21 Sep 2011 vince

I find a simple

sqrt((a-b)'*(a-b))

faster to compute the Euclidean distance

Please login to add a comment or rating.
Tag Activity for this File
Tag Applied By Date/Time
fuzzy logic R. Bunschoten 22 Oct 2008 06:31:31
neural networks R. Bunschoten 22 Oct 2008 06:31:31
euclidean R. Bunschoten 22 Oct 2008 06:31:31
distance R. Bunschoten 22 Oct 2008 06:31:31
dist R. Bunschoten 22 Oct 2008 06:31:31
euclidean Babak Taati 22 Dec 2008 23:07:56
distance Babak Taati 22 Dec 2008 23:07:58
l2 Babak Taati 22 Dec 2008 23:08:01
vectorized Babak Taati 22 Dec 2008 23:08:01
distance Adam Hartshorne 01 Mar 2009 19:48:40
euclidean Clint P. George 16 Apr 2009 09:55:01
euclidean Haitham BouAmmar 25 May 2010 11:51:00
euclidean Ville 14 Jun 2010 05:56:41
dist Samuel 29 Nov 2010 19:25:47
dist Santosh 25 Apr 2011 05:30:49
dist parul 13 May 2011 01:39:07
neural networks The Anh 22 Jul 2011 04:23:02
dist Ricardo Jacomini 29 Aug 2011 14:20:42
dist Gabe Espinosa 21 Oct 2011 15:33:41

Contact us at files@mathworks.com