Convert for loop to vector multiplication.
1 view (last 30 days)
Show older comments
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 Comments
Answers (1)
Walter Roberson
on 17 Aug 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()
See Also
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!