Substract Matrix coloum-wise from Matrix without using a loop

3 vues (au cours des 30 derniers jours)
kaju
kaju le 7 Nov 2019
Commenté : kaju le 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!

Réponse acceptée

Stephen23
Stephen23 le 7 Nov 2019
Modifié(e) : Stephen23 le 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

Plus de réponses (1)

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

Catégories

En savoir plus sur Creating and Concatenating Matrices dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by