Extract a row from a 2D matrix if any of its element matches with elements in other 1D matrix

1 回表示 (過去 30 日間)
I have 2D matrxi A (size: 10000 x 3) and 1D matrix B (size: 5000 x 1)
If one elemnt of row in A matches with any element in B, then that rwo sfould be separated out. Suppose there are N such rows then I want the output as a matrix C (size: N x 3), (which is a subset of A).
I am using the code:
counter = 0
for i = 1:length(A)
if sum(ismember(A(i,:),B)) >= 1
counter = counter + 1;
C(counter,:) = A(i,:);
end
end
This gives me the output I want, but it takes huge time especially on very large sized matrices.
Any one/two liner replacment to speed up the code?
Thanks.

採用された回答

Gaurav Aggarwal
Gaurav Aggarwal 2020 年 7 月 3 日
編集済み: Gaurav Aggarwal 2020 年 7 月 3 日
Hi Sachin,
Can you check if this works for you?
C = A(any(ismember(A,B),2),:);
Thanks.

その他の回答 (1 件)

Gifari Zulkarnaen
Gifari Zulkarnaen 2020 年 7 月 3 日
Try this:
idx = [];
for i = 1:size(A,1)
if any(ismember(A(i,:),B))
idx = [idx i];
end
end
C = A(idx,:);

カテゴリ

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

Community Treasure Hunt

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

Start Hunting!

Translated by