# calculate the (geometrical) distance between points of a matrix

9 views (last 30 days)
Felix on 27 Jan 2012
Lets say I have a large matrix full of zeros, with a few numbers (1,2,3,4,5) located at various positions. Now I want to calculate the distances from point 1 to 2, 1 to 3, 1 to 4 and 1 to 5. Assuming that e.g. the width of the columns in this matrix is 0.4mm and the width of the rows is 0.25mm. Maybe there is already a code/toolbox out there to do such things?

Andrei Bobrov on 27 Jan 2012
eg:
data =[0 0 0 0 0 0 0 0 0 0
0 0 0 0 3 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 4 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 5 0 0
0 0 0 0 0 0 0 0 0 0]
[i1,j1,c] = find(data)
ijc = sortrows([i1,j1,c],3)
d = bsxfun(@minus,ijc(2:end,1:2),ijc(1,1:2))
out = hypot(d(:,1)*.25,d(:,2)*.4)
OR
use function dist from Neural Network Toolbox
c = dist(bsxfun(@times,ijc(:,1:2),[.25 .4]).');
out = c(:,1);

Felix on 27 Jan 2012
Thanks, this works great for me, even though I don't understand it.
(I assume here the cells are considered to be infinitesimal points connected with lines of defined lengths?)
I have to check out the documentation of this toolbox, one thing I might want to do is calculate the distance of the path from 1 to 2 to 3, 1 to 2 to 3 to 4 and 1 to 2 to 3 to 4 to 5.
Andrei Bobrov on 27 Jan 2012
out = diag(dist(bsxfun(@times,ij,[.25; .4])),1)
this is 1 to 2 to 3 to 4 to 5.