File Exchange

image thumbnail

Pair-wise Euclidean Distance Matrix

version 1.2 (2.62 KB) by

Computing the distance matrix without loops

3 Downloads

Updated

View License

This is a very simple function to compute pair-wise Euclidean distances within a vector set, from between two vector sets. Although simple, it is very useful. Using loops will be too slow.
D=distanceMatrix(X), where X is N*d data, and D is N*N distance matrix.

or D=distanceMatrix2(X,Y).

Comments and Ratings (1)

Jonas Lundgren

Jonas Lundgren (view profile)

Dear Quan Wang,

It is a widespread misunderstanding that MATLAB loops are slow in general. Loops with simple math operations can be very fast. Waste of memory is always slow and so is the function repmat.

Compare distanceMatrix(X) with distmat(X) below. X = rand(1000,3).

I am sure you will reply with something even faster. I look forward to update the rating.

Kind regards
Jonas Lundgren

%------------------
function D = distmat(X)
%DISTMAT Compute euclidian distance matrix from coordinates

[n,dim] = size(X);
D = zeros(n);
for j = 1:n
for k = 1:dim
v = X(:,k) - X(j,k);
D(:,j) = D(:,j) + v.*v;
end
end
D = sqrt(D);

Updates

1.2

Changed the description.

1.1

Added distance matrix from X to Y.

MATLAB Release
MATLAB 8.2 (R2013b)

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video

Win prizes and improve your MATLAB skills

Play today