Reducing the computation time using a for loop

1 回表示 (過去 30 日間)
Danielle Leblance
Danielle Leblance 2016 年 10 月 11 日
編集済み: Guillaume 2016 年 10 月 11 日
A is a matrix with a bigger size than the B matrix. B is a subset of A (except the last column that I am trying to fill A;s last column with the respective values of B's last column). I wrote the following loop that has been running for more than an hour although it should be simple. I hoe someone can help me to reduce the computation time:
for m=1:size(A,1)
for n=1:size(B,1)
x0a=A(:,2)==B(n,2) & A(:,1)==B(n,1);
if ~isempty(x0a)
A(m,end)=B(x0a,end);
end
end
end

採用された回答

Guillaume
Guillaume 2016 年 10 月 11 日
編集済み: Guillaume 2016 年 10 月 11 日
You do not need a loop at all if you use ismember:
[isinB, Brow] = ismember(A(:, [1 2]), B(:, [1 2]), 'rows');
A(isinB, end) = B(Brow(isinB), end);
edit: silly typo
  2 件のコメント
Danielle Leblance
Danielle Leblance 2016 年 10 月 11 日
I am receiving an error Index exceeds matrix dimensions.
Error in AvgA (line 7) [isinB, Brow] = ismember(A(:, [1 2]), B(:, [1 2], 'rows'));
Guillaume
Guillaume 2016 年 10 月 11 日
You corrected my typo, but not correctly. The missing closing bracket was supposed to go at the end of B(:, [1 2]).
I've now fixed it in my answer.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by