Substract Matrix coloum-wise from Matrix without using a loop

3 次查看(过去 30 天)
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 个)

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

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by