Reducing the computation time using a for loop

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 日

0 投票

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 件)

カテゴリ

ヘルプ センター および File ExchangeMATLAB についてさらに検索

タグ

質問済み:

2016 年 10 月 11 日

編集済み:

2016 年 10 月 11 日

Community Treasure Hunt

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

Start Hunting!

Translated by