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

26 ビュー (過去 30 日間)
Tom
Tom 2013 年 6 月 12 日
コメント済み: Captain Karnage 2023 年 6 月 27 日
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?

採用された回答

Matt J
Matt J 2013 年 6 月 12 日
編集済み: Matt J 2013 年 6 月 12 日
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 件のコメント
Captain Karnage
Captain Karnage 2023 年 6 月 27 日
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.

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

その他の回答 (1 件)

Jan
Jan 2013 年 6 月 13 日
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

カテゴリ

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

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by