Ismember function -- return all indexes, not just lowest?

30 views (last 30 days)
According to the Matlab documentation,
[Lia,Locb] = ismember(A,B) returns an array, Locb, containing the lowest index in B for each value in A that is a member of B.
Is there a way to return an array (or matrix) containing all indexes in B for each value in A that is a member of B?

Accepted Answer

Matt J
Matt J on 12 Jun 2013
Edited: Matt J on 12 Jun 2013
For numeric A and B, I would probably do something like this
Lia = ismember(A,B)
idx=find(Lia);
map=bsxfun(@eq, A(idx),B(:));
Then map(:,i) will be a logical index into B of all points where B equals A(idx(i))
  1 Comment
Captain Karnage
Captain Karnage on 27 Jun 2023
The step idx=find(Lia) is not necessary, you can use A(Lia) to get the same result and it is a faster, more efficient way to index A in MATLAB.
Also, if B is not a vector, this will not work. You would need more steps to search a 2(or more)-D array.

Sign in to comment.

More Answers (1)

Jan
Jan on 13 Jun 2013
Then the output can have different sizes for the different elements of A and a cell is required. What about a simple loop:
Out = cell(1, numel(A))
for iA = 1:numel(A)
Out{iA} = find(B == A(iA));
end

Categories

Find more on Data Type Conversion 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!