Find multiple elements in an array.

400 views (last 30 days)
I have an array a = [1 5 2 5 3 5 4 5]. I have a second array b = [2,3,4].
I want to type something like c = find(a == b), but Matlab doesn't like it that the dimensions don't agree. The answer I am looking for is c = [3,5,7].
I know I could do it with a for loop. Trying to avoid a for loop for speed concerns. Any help would be appreciated.

Accepted Answer

Image Analyst
Image Analyst on 20 Mar 2012
Use ismember:
a = [1 5 2 5 3 5 4 5]
b = [2,3,4]
% Give "true" if the element in "a" is a member of "b".
c = ismember(a, b)
% Extract the elements of a at those indexes.
indexes = find(c)
Results:
a =
1 5 2 5 3 5 4 5
b =
2 3 4
c =
0 0 1 0 1 0 1 0
indexes =
3 5 7
Obviously you can do away with "c" if you want, and just have a one-liner. I did it in two steps just for tutorial purposes.
  5 Comments
Image Analyst
Image Analyst on 5 May 2016
Supraj:
Try this:
a = [1 5 2 5 3 5 4 2 5]
b = [5,2,4]
output = [];
for k = 1 : length(b)
output = [output, find(a == b(k))]
end
Shlomo Geva
Shlomo Geva on 2 Dec 2020
Edited: Shlomo Geva on 2 Dec 2020
Without an explicit loop (a bit convoluted, sorry, just having fun, 8 years too late)
a = [1 5 2 5 3 5 4 2 5];
b = [5,2,4];
[~,Locb]=ismember(a,b);
[s,si]=sort(Locb);
out=si(s>0)
out =
2 4 6 9 3 8 7
>>

Sign in to comment.

More Answers (2)

Jos (10584)
Jos (10584) on 12 Jun 2014
Use the second output of ismember:
a = [4 3 1 2 5]
b = [2 3 3]
[tf, loc] = ismember(b,a)
% loc is [ 4 2 2] as required

Shlomo Geva
Shlomo Geva on 2 Dec 2020
Edited: Shlomo Geva on 2 Dec 2020
function out = findMultipleElements(a,b)
% Find multiple elements in an array
% example:
% a = [1 5 2 5 3 5 4 2 5]
% b = [5,2,4]
% result = [2,4,6,9,3,8,7] % the indexes in a of elements from b, in order
% % The convoluted (obfuscated) solution.
[~,Locb]=ismember(a,b);
[s,si]=sort(Locb);
out=si(s>0);
% % The straight shooter solution.
% out = [];
% for n = 1:length(b)
% out = [out,find(a==b(n))]
% end
end

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!