Can you optimize this row matching code?

1 回表示 (過去 30 日間)
Amir
Amir 2014 年 4 月 23 日
編集済み: Amir 2014 年 4 月 23 日
Hi everyone,
I have a huge matrix on which I need to do some matching operation. Here's the code I have written and it works fine, but I think there is some room to make it more optimized or write another code that does the matching in less time. Could you please help me with that?
rowsMatched = find(bigMatrix(:, 1) == matchingRow(1, 1) & bigMatrix(:, 2) == matchingRow(1, 2) & bigMatrix(:, 3) == matchingRow(1, 3))
The problem with this code is that I cannot use the && operand. So, in case one of the columns do not match the program still checks the next condition. How do you think I can avoid this?
Thank you
  2 件のコメント
Matt Kindig
Matt Kindig 2014 年 4 月 23 日
Is matchingRow only a 1x3 vector? Or do you loop through all rows in matchingRow?
Can you post your full code?
Amir
Amir 2014 年 4 月 23 日
編集済み: Amir 2014 年 4 月 23 日
It's just a 1x3 vector in this case, but it could be up to 1 x 10 (in case I had a bigMatrix with the size, say, (1m, 10). However, I still don't know how to make the code that much flexible being able to do the matching for a 1 x 3 up to 1 x 10 matchingRow vector.

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

採用された回答

Amir
Amir 2014 年 4 月 23 日
編集済み: Amir 2014 年 4 月 23 日
Here's the solution:
rowsMatched = find(all(bsxfun(@eq, bigMatrix, matchingRow),2))

その他の回答 (1 件)

Matt Kindig
Matt Kindig 2014 年 4 月 23 日
How about this approach? Is it fast enough?
%bigMatrix is MxN, matchingRow is 1xN
rowsMatched = find(ismember( bigMatrix(:,1:3), matchingRow, 'rows'));
  1 件のコメント
Amir
Amir 2014 年 4 月 23 日
No this is slower.

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

カテゴリ

Help Center および File ExchangeProgramming についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by