Convert for loop to vector multiplication.

1 view (last 30 days)
hello_world
hello_world on 17 Aug 2016
Edited: hello_world on 17 Aug 2016
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.

Answers (1)

Walter Roberson
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()
  1 Comment
hello_world
hello_world on 17 Aug 2016
Edited: hello_world on 17 Aug 2016
Can you elaborate please with a work example using * so that the two results be the same.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!