Substract Matrix coloum-wise from Matrix without using a loop

3 Ansichten (letzte 30 Tage)
kaju
kaju am 7 Nov. 2019
Kommentiert: kaju am 7 Nov. 2019
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!

Akzeptierte Antwort

Stephen23
Stephen23 am 7 Nov. 2019
Bearbeitet: Stephen23 am 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

Weitere Antworten (1)

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

Kategorien

Mehr zu Creating and Concatenating Matrices finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by