Here’s how to **calculate the L2 Euclidean distance between points in MATLAB**.

The whole kicker is **you can simply use the built-in MATLAB function, pdist2(p1, p2, ‘euclidean’)** and be done with it. *p1* is a matrix of points and *p2* is another matrix of points (or they can be a single point).

However, initially I wasn’t really clear about what was going on. So if you are still a bit confused, let’s chat about it…

The scenario: **You have one point**, *aPoint*, that you wish to **compare against a bunch of other points** *bunchOfPoints*. For simplicity, let’s work in two-dimensional (2D) space. Note that 2D means each point is composed of two pieces of information (i.e. has 2 components).

We start by **defining our points**, then we **calculate the L2 distance by hand**, then we use the **built-in pdist2() function** to show we get the same result. And then finally, as a little bonus, we show how to get the **minimum L2 Euclidean distance** at the end.

Here’s how to calculate the equation by hand if you’re interested.

http://en.wikipedia.org/wiki/Norm_%28mathematics%29#Euclidean_norm

% disL2
% Define our points.
aPoint = [1,4]; % A single point with 2 components.
bunchOfPoints = [2,3; 1,4; 0,1]; % A bunch of other points.
% Make 'aPoint' the same size as a 'bunchOfPoints'.
aPointMatrix = repmat(aPoint,size(bunchOfPoints,1),1);
% Calculate by hand.
%% L2 Euclidean Norm.
% http://en.wikipedia.org/wiki/Norm_%28mathematics%29#Euclidean_norm
% 1) Take the difference between the two -> aPointMatrix-bunchOfPoints
% 2) Square the difference to get rid of positive/negative:
% (aPointMatrix-bunchOfPoints).^2
% 3) Sum this up along the rows.
% (sum(((aPointMatrix-bunchOfPoints).^2), 2))
% 4) Take the square root of this.
% (sum(((aPointMatrix-bunchOfPoints).^2), 2)).^0.5
pointsDifSquare = (sum(((aPointMatrix-bunchOfPoints).^2), 2)).^0.5
% output = 1.4142 0 3.1623
%% Or we can just use this handy built-in function...
d = pdist2(aPoint,bunchOfPoints,'euclidean')
% same output! = 1.4142 0 3.1623
%% Bonus, how to find the min distance!
[theMinDistance, indexOftheMinDistance] = min(d)
% Yeah! As expected theMinDistance = 0 and indexOftheMinDistance = 2. |

% disL2 % Define our points.
aPoint = [1,4]; % A single point with 2 components.
bunchOfPoints = [2,3; 1,4; 0,1]; % A bunch of other points. % Make 'aPoint' the same size as a 'bunchOfPoints'.
aPointMatrix = repmat(aPoint,size(bunchOfPoints,1),1); % Calculate by hand.
%% L2 Euclidean Norm.
% http://en.wikipedia.org/wiki/Norm_%28mathematics%29#Euclidean_norm
% 1) Take the difference between the two -> aPointMatrix-bunchOfPoints
% 2) Square the difference to get rid of positive/negative:
% (aPointMatrix-bunchOfPoints).^2
% 3) Sum this up along the rows.
% (sum(((aPointMatrix-bunchOfPoints).^2), 2))
% 4) Take the square root of this.
% (sum(((aPointMatrix-bunchOfPoints).^2), 2)).^0.5
pointsDifSquare = (sum(((aPointMatrix-bunchOfPoints).^2), 2)).^0.5 % output = 1.4142 0 3.1623 %% Or we can just use this handy built-in function...
d = pdist2(aPoint,bunchOfPoints,'euclidean') % same output! = 1.4142 0 3.1623 %% Bonus, how to find the min distance!
[theMinDistance, indexOftheMinDistance] = min(d) % Yeah! As expected theMinDistance = 0 and indexOftheMinDistance = 2.

*Related*