Convert for loop to vector multiplication.

1 次查看(过去 30 天)
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.

回答(1 个)

Walter Roberson
Walter Roberson 2016-8-17
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 个评论
hello_world
hello_world 2016-8-17
编辑:hello_world 2016-8-17
Can you elaborate please with a work example using * so that the two results be the same.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Logical 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by