MATLAB: Calculating Euclidean distance of pairs of 3D points.

euclidean distancematrix

I have an Nx3 array that contains N 3D points
a1 b1 c1
a2 b2 c2
....
aN bN cN
I want to calculate Euclidean distance in a NxN array that measures the Euclidean distance between each pair of 3D points. (i,j) in result array returns the distance between (ai,bi,ci) and (aj,bj,cj). Is it possible to write a code for this without loop ?

Best Answer

use Statistics Toolbox:
out = squareform(pdist(Nm)); % here Nm - your matrix [Nx3]
one variant without Statistics Toolbox:
nc = num2cell(Nm,2);
[x,y] = ndgrid(1:N);
out = cellfun(@(x,y)sqrt(sum((x-y).^2)),nc(x),nc(y));
other variant
out = squeeze(sqrt(sum(bsxfun(@minus,Nm,permute(Nm,[3,2,1])).^2,2)));
Related Question