MATLAB: Efficient calculation of 3d matrix of distances

vectorization 3d matrix of distaces

Dear;
I would like to calculate the 3D matrix of distances between one point an each element of a 3D matrix in an efficient way.
Without vectorization the code is:
MDistances=zeros(size(M));
for i=1:size(M,1)
for j=1:size(M,2)
for k=1:size(M,3)
MDistances(i,j,k)=(i-ip)^2+(j-jp)^2+(k-kp)^2
end
end
end
MDistances=sqrt(MDistances);
Thanks a lot!!

Best Answer

[x, y, z] = meshgrid( (j-jp)^2, (i-ip)^2, (k-kp)^2 );
distSq = x + y + z;
MDistances = sqrt( distSq );
should give the correct answer I think. I always get confused with meshgrid though how my x and y inputs and outputs always seem to be the wrong way round. When I did the obvious approach I ended up with an answer that didn't match expectations so swapping i and j around in the inputs seems to give the right answer.
Maybe someone else can expand on why that is the case as I don't have the time to re-remember!