Index multiple elements in a vector using logical indexing

Hi, I want to use logical indexing to "grap" some elements from a vector. Normally if you're only looking for a single element, you could use the "find" function, for example:
A = [1 2 3 4 5 6];
B = 2;
C = [5 6 7 8 9 0]
D = C(find(A==B));
or use something like: D = C(A==B);
But now I am interested in finding multiple elements in A. So B becomes a vector in this case. For example:
A = [1 2 3 4 5 6];
B = [2 4];
C = [5 6 7 8 9 0]
I thought I could do something simular as in the upper case, by writing something like:
D = C(A==B). But apparently this does noet work.
Can anyone help me? Thanks a lot in advance!

2 Comments

Very well written question, you get a vote!
Indeed! Good question, and good answers. A good community exchange all round!
(It was a Q&A of two halves, the comment with the most votes won, but MATLAB Answers was the real winner on the day. Ahhh, my cliche-o-matic is stuck...)

Sign in to comment.

 Accepted Answer

Oleg's way is probably faster, but also:
D = C(any(bsxfun(@eq,A.',B),2))

1 Comment

Thanks a lot to both of you.
I was not aware of the "ismember" function, but this works indeed.
Thanks!

Sign in to comment.

More Answers (2)

For comparison with multiple elements:
D = C(ismember(A,B))
Also, avoid to use find when you don't need the coordinates.

Community Treasure Hunt

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

Start Hunting!