Substract Matrix coloum-wise from Matrix without using a loop

3 views (last 30 days)
Hello,
is there a way to substract all coloumns of one matrix one by one from another matrix without using a loop?
I am trying to calculate the minimum distance of all the 3D points in matrix B to all the points in matrix A, where A = [109x3]; B = [109x3].
WITH a loop I would do it that way:
for n=109:-1:1
distance(n) = min(sqrt(sum((A - B(n,:)).^2,2)));
end
I was thinking of the repmat function but cant quite figure it out.
Thank your very much!

Accepted Answer

Stephen23
Stephen23 on 7 Nov 2019
Edited: Stephen23 on 7 Nov 2019
permute lets you do this on one line:
D = min(sqrt(sum(bsxfun(@minus,permute(A,[1,3,2]),permute(B,[3,1,2])).^2,3)),[],1);
And testing against your code (using two matrices of random values):
>> isequal(distance,D)
ans = 1

More Answers (1)

JESUS DAVID ARIZA ROYETH
JESUS DAVID ARIZA ROYETH on 7 Nov 2019
if you have Statistics and Machine Learning Toolbox :
distance=min(pdist2(A,B));

Categories

Find more on Creating and Concatenating Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!