Convert for loop to vector multiplication.
    9 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
Hello Friends,
I have the following:
A = [1 2 3;
     4 5 6;
     7 8 9];
B = [10 11 12;
     13 14 15];
[N1, D1] = size(A);
[N2, D2] = size(B);
for i = 1:N2    
    diffs = bsxfun(@minus, A, B(i, :));    
    dists(:, i) = sqrt(sum(diffs.^2, 2));
end
How can I replace the 2nd line in for loop in order to write it in a vector form? I have tried something like this:
for i = 1:N2    
  diffs = bsxfun(@minus, A, B(i, :)); 
  dists = sqrt(diffs.*diffs);
end
But the two results are different. I am trying to achieve the following:
distance = sqrt((A-B).*(A-B))
which should be the Euclidean distance. I want to keep it as presented above without changing format to compute distance or using repmat, etc.
0 Commenti
Risposte (1)
  Walter Roberson
      
      
 il 17 Ago 2016
        dists = sqrt(diffs.*diffs);
is not going to be doing any sum. You might be thinking of the * operator instead of the .* operator.
You could also look at dot() and norm()
Vedere anche
Categorie
				Scopri di più su Loops and Conditional Statements 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!

