フィルターのクリア

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

38 ビュー (過去 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 ExchangeData Type Conversion についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by