Calculating Euclidean distance of pairs of 3D points.

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 ?

 Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 11 Sep. 2014
Bearbeitet: Andrei Bobrov am 11 Sep. 2014
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)));

1 Kommentar

regarding the last variant, when I use this with a 2x3 matrix, the output is a 2x2 matrix with the distance appearing twice, what might be the cause of that?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Roger Stafford
Roger Stafford am 11 Sep. 2014

0 Stimmen

Use matlab's 'pdist' and 'squareform' functions

Kategorien

Community Treasure Hunt

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

Start Hunting!

Translated by