Substract Matrix coloum-wise from Matrix without using a loop

1 visualizzazione (ultimi 30 giorni)
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!

Risposta accettata

Stephen23
Stephen23 il 7 Nov 2019
Modificato: Stephen23 il 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

Più risposte (1)

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

Categorie

Scopri di più su Creating and Concatenating Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by