Substract Matrix coloum-wise from Matrix without using a loop

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!

 채택된 답변

Stephen23
Stephen23 2019년 11월 7일
편집: Stephen23 2019년 11월 7일
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

추가 답변 (1개)

if you have Statistics and Machine Learning Toolbox :
distance=min(pdist2(A,B));

카테고리

도움말 센터File Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

질문:

2019년 11월 7일

댓글:

2019년 11월 7일

Community Treasure Hunt

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

Start Hunting!

Translated by