Main Content

ismember

集合配列のメンバーである配列要素

説明

Lia = ismember(A,B) は、A 内のデータが B に見つかった場合に、logical 1 (true) を含む配列を返します。それ以外の場合、配列は logical 0 (false) を含みます。

  • AB が table または timetable の場合、ismember は、各行に対して logical 値を返します。timetable の場合、ismember は行時間を考慮して等価性を判別します。出力 Lia は列ベクトルです。

Lia = ismember(A,B,'rows') は、A の各行および B の各行を個別のエンティティとして扱い、A の行が B の行でもある場合に logical 1 (true) を含む列ベクトルを返します。それ以外の場合、配列は logical 0 (false) を含みます。

入力がいずれも categorical 配列または datetime 配列でない場合、'rows' オプションは cell 配列をサポートしません。

[Lia,Locb] = ismember(___) は、前述の任意の構文を使用して、配列 Locb も返します。

  • 一般的に、Locb には B のメンバーである A の各値に対する B の最小インデックスが含まれます。値 0AB のメンバーではないことを示します。

  • 'rows' オプションが指定されている場合、Locb には、B の行でもある A の行ごとに B の最小インデックスが含まれます。値 0AB の行ではないことを示します。

  • AB が table または timetable の場合、Locb には、B の行でもある A の行ごとに B の最小インデックスが含まれます。値 0AB の行ではないことを示します。

[Lia,Locb] = ismember(___,'legacy') は、前述の構文の入力引数のいずれかを使用して、R2012b 以前のリリースの関数 ismember の動作を保持します。

'legacy' オプションは categorical 配列、datetime 配列、duration 配列、table または timetable をサポートしません。

すべて折りたたむ

共通の値をもつ 2 つのベクトルを作成します。

A = [5 3 4 2]; 
B = [2 4 4 4 6 8];

B にある A の要素を判別します。

Lia = ismember(A,B)
Lia = 1x4 logical array

   0   0   1   1

A(3)A(4) は、B にあります。

共通の行をもつ 2 つのテーブルを作成します。

A = table([1:5]',['A';'B';'C';'D';'E'],logical([0;1;0;1;0]))
A=5×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     2       B      true 
     3       C      false
     4       D      true 
     5       E      false

B = table([1:2:10]',['A';'C';'E';'G';'I'],logical(zeros(5,1)))
B=5×3 table
    Var1    Var2    Var3 
    ____    ____    _____

     1       A      false
     3       C      false
     5       E      false
     7       G      false
     9       I      false

B にある A の行を判別します。

Lia = ismember(A,B)
Lia = 5x1 logical array

   1
   0
   1
   0
   1

A(1,:)A(3,:) および A(5,:) は、B にあります。

共通の値をもつ 2 つのベクトルを作成します。

A = [5 3 4 2]; 
B = [2 4 4 4 6 8];

B にある A の要素と B 内の対応する場所を判別します。

[Lia,Locb] = ismember(A,B)
Lia = 1x4 logical array

   0   0   1   1

Locb = 1×4

     0     0     2     1

A(3) への最小のインデックスは B(2) で、A(4)B(1) に存在します。

ベクトル x を作成します。x の変換と復元を実行して、2 番目のベクトル y を取得します。この変換により y で丸め誤差が生じます。

x = (1:6)'*pi;
y = 10.^log10(x);

この誤差を求め、xy が同一でないことを検証します。

x-y
ans = 6×1
10-14 ×

    0.0444
         0
         0
         0
         0
   -0.3553

ismember を使用して、y に含まれる x の要素を検索します。関数 ismember は厳密な比較を実行し、x にある行列要素の一部が y に含まれないことを判別します。

lia = ismember(x,y)
lia = 6x1 logical array

   0
   1
   1
   1
   1
   0

ismembertol を使用して、わずかな誤差が許される比較を実行します。ismembertol は、許容誤差内の要素を等価として扱い、x 内のすべての要素が y のメンバーであると判断します。

LIA = ismembertol(x,y)
LIA = 6x1 logical array

   1
   1
   1
   1
   1
   1

5 人の性別、年齢および身長の table A を作成します。

A = table(['M';'M';'F';'M';'F'],[27;52;31;46;35],[74;68;64;61;64],...
'VariableNames',{'Gender' 'Age' 'Height'},...
'RowNames',{'Ted' 'Fred' 'Betty' 'Bob' 'Judy'})
A=5×3 table
             Gender    Age    Height
             ______    ___    ______

    Ted        M       27       74  
    Fred       M       52       68  
    Betty      F       31       64  
    Bob        M       46       61  
    Judy       F       35       64  

A と共通する行をもつもう 1 つの table B を作成します。

B = table(['M';'F';'F';'F'],[47;31;35;23],[68;64;62;58],...
'VariableNames',{'Gender' 'Age' 'Height'},...
'RowNames',{'Joe' 'Meg' 'Beth' 'Amy'})
B=4×3 table
            Gender    Age    Height
            ______    ___    ______

    Joe       M       47       68  
    Meg       F       31       64  
    Beth      F       35       62  
    Amy       F       23       58  

B にある A の行と B 内の対応する場所を判別します。

[Lia,Locb] = ismember(A,B)
Lia = 5x1 logical array

   0
   0
   1
   0
   0

Locb = 5×1

     0
     0
     2
     0
     0

値が同じで名前が異なる 2 つの行は、等しいと見なされます。Betty の同じデータが B(2,:) にあります。これは Meg に対応しています。

共通の行をもつ 2 つの行列を作成します。

A = [1 3 5 6; 2 4 6 8];
B = [2 4 6 8; 1 3 5 7; 2 4 6 8];

B にある A の行と B 内の対応する場所を判別します。

[Lia, Locb] = ismember(A,B, 'rows')
Lia = 2x1 logical array

   0
   1

Locb = 2×1

     0
     1

A(2,:) への最小のインデックスは B(1,:) です。

NaN を含む 2 つのベクトルを作成します。

A = [5 NaN NaN]; 
B = [5 NaN NaN];

B にある A の要素と B 内の対応する場所を判別します。

[Lia,Locb] = ismember(A,B)
Lia = 1x3 logical array

   1   0   0

Locb = 1×3

     1     0     0

ismemberNaN 値を個別のものとして処理します。

文字ベクトルの cell 配列 A を作成します。

A = {'dog','cat','fish','horse'};

文字ベクトルの cell 配列 B を作成します。一部のベクトルは末尾に空白文字があります。

B = {'dog ','cat','fish ','horse'};

A 内のどの文字ベクトルが B にも存在するかを判別します。

[Lia,Locb] = ismember(A,B)
Lia = 1x4 logical array

   0   1   0   1

Locb = 1×4

     0     2     0     4

ismember は、文字ベクトルの cell 配列内の末尾の空白文字を別個の文字として処理します。

文字ベクトル A と文字ベクトルの cell 配列 B を作成します。

A = ['cat';'dog';'fox';'pig'];
B = {'dog','cat','fish','horse'};

A 内のどの文字ベクトルが B にも存在するかを判別します。

[Lia,Locb] = ismember(A,B)
Lia = 4x1 logical array

   1
   1
   0
   0

Locb = 4×1

     2
     1
     0
     0

'legacy' フラグを使用して、コード内の R2012b およびそれ以前のリリースの ismember の動作を保持します。

現在の動作における B のメンバーを検出します。

A = [5 3 4 2]; 
B = [2 4 4 4 6 8];
[Lia1,Locb1] = ismember(A,B)
Lia1 = 1x4 logical array

   0   0   1   1

Locb1 = 1×4

     0     0     2     1

B のメンバーを検出し、レガシ動作を保持します。

[Lia2,Locb2] = ismember(A,B,'legacy')
Lia2 = 1x4 logical array

   0   0   1   1

Locb2 = 1×4

     0     0     4     1

入力引数

すべて折りたたむ

クエリ配列。数値配列、logical 配列、文字配列、string 配列、categorical 配列、datetime 配列、duration 配列、文字ベクトルの cell 配列、table または timetable として指定します。'rows' オプションを指定した場合、A および B は同じ数の列をもたなければなりません。

A は次の例外がありますが、B と同じクラスに属さなければなりません。

  • logicalchar、およびすべての数値クラスは double 配列と組み合わせることができます。

  • 文字ベクトルの cell 配列は、文字配列または string 配列と組み合わせることができます。

  • categorical 配列は、文字配列、文字ベクトルの cell 配列または string 配列と組み合わせることができます。

  • datetime 配列は、日付文字ベクトルの cell 配列または単一の日付文字ベクトルと組み合わせることができます。

AB には、データ型に基づく追加の要件があります。

  • AB の両方が順序 categorical 配列である場合は、順序を含めて同じカテゴリ セットでなければなりません。AB の両方が順序配列でない場合、同じカテゴリ セットをもつ必要はなく、カテゴリ名を使用して比較が実行されます。

  • A が table または timetable の場合は、順序を除き、B と同じ変数名でなければなりません。table の場合、行名は無視されるため、値が同じで名前が異なる 2 つの行は等しいと見なされます。timetable の場合、行時間が考慮されるため、値が同じで時間が異なる 2 つの行は、等しくないと見なされます。

  • AB が datetime 配列の場合、タイム ゾーンの指定が互いに一貫していなければなりません。

テキスト入力の場合、通常 ismember は文字ベクトル、文字ベクトルの cell 配列、および string 配列内の末尾の空白を無視しません。ただし、ismember が末尾の空白を無視する場合がいくつかあります。

  • A が文字配列で、かつ B が文字ベクトルの cell 配列である場合、ismember は文字配列内の末尾の空白を無視します。

  • 'rows' オプションが指定された場合、ismember は文字ベクトルと文字配列内の末尾の空白を無視します。

また、A は次のクラス メソッドをもつオブジェクトにすることもできます。

  • sort (または 'rows' オプションの sortrows)

  • eq

  • ne

オブジェクト クラスのメソッドは、相互に一貫していなければなりません。これらのオブジェクトは、同じルート クラスから導出した異種混合配列を含みます。たとえば、A はグラフィックス オブジェクトのハンドルの配列にすることができます。

集合配列。数値配列、logical 配列、文字配列、string 配列、categorical 配列、datetime 配列、duration 配列、文字ベクトルの cell 配列、table または timetable として指定します。'rows' オプションを指定した場合、A および B は同じ数の列をもたなければなりません。

B は次の例外がありますが、A と同じクラスに属さなければなりません。

  • logicalchar、およびすべての数値クラスは double 配列と組み合わせることができます。

  • 文字ベクトルの cell 配列は、文字配列または string 配列と組み合わせることができます。

  • categorical 配列は、文字配列、文字ベクトルの cell 配列または string 配列と組み合わせることができます。

  • datetime 配列は、日付文字ベクトルの cell 配列または単一の日付文字ベクトルと組み合わせることができます。

AB には、データ型に基づく追加の要件があります。

  • AB の両方が順序 categorical 配列である場合は、順序を含めて同じカテゴリ セットでなければなりません。AB の両方が順序配列でない場合、同じカテゴリ セットをもつ必要はなく、カテゴリ名を使用して比較が実行されます。

  • B が table または timetable の場合は、順序を除き、A と同じ変数名でなければなりません。table の場合、行名は無視されるため、値が同じで名前が異なる 2 つの行は等しいと見なされます。timetable の場合、行時間が考慮されるため、値が同じで時間が異なる 2 つの行は、等しくないと見なされます。

  • AB が datetime 配列の場合、タイム ゾーンの指定が互いに一貫していなければなりません。

テキスト入力の場合、通常 ismember は文字ベクトル、文字ベクトルの cell 配列、および string 配列内の末尾の空白を無視しません。ただし、ismember が末尾の空白を無視する場合がいくつかあります。

  • A が文字配列で、かつ B が文字ベクトルの cell 配列である場合、ismember は文字配列内の末尾の空白を無視します。

  • 'rows' オプションが指定された場合、ismember は文字ベクトルと文字配列内の末尾の空白を無視します。

また、B は次のクラス メソッドをもつオブジェクトにすることもできます。

  • sort (または 'rows' オプションの sortrows)

  • eq

  • ne

オブジェクト クラスのメソッドは、相互に一貫していなければなりません。これらのオブジェクトは、同じルート クラスから導出した異種混合配列を含みます。たとえば、B はグラフィックス オブジェクトのハンドルの配列にすることができます。

出力引数

すべて折りたたむ

A への論理インデックス。A の値 (または行) が B のメンバーである場合に、logical 1 (true) を含むベクトル、行列または N 次元配列として返されます。それ以外の場合、logical 0 (false) が含まれます。

'rows' フラグを指定しない限り、LiaA と同じサイズの配列です。

'rows' フラグを指定するか、A が table または timetable の場合、LiaA と同じ行数をもつ列ベクトルになります。

B 内の場所。ベクトル、行列または N 次元配列として返されます。'legacy' フラグを指定しない場合、Locb は、A 内に見つかった B 内の値 (または行) に対する最小のインデックスを含みます。値 0AB のメンバーではないことを示します。

'rows' フラグを指定しない限り、LocbA と同じサイズの配列です。

'rows' フラグを指定するか、A が table または timetable の場合、LocbA と同じ行数をもつ列ベクトルになります。

ヒント

  • 許容誤差を使用して浮動小数点数を比較するには ismembertol を使用します。

  • 変数のサブセットに関して、table または timetable AB で共通する行を検出するには、列の添字を使用できます。たとえば、ismember(A(:,vars),B(:,vars)) を使用できます。ここで、vars は、正の整数、正の整数のベクトル、変数名、変数名の cell 配列または logical ベクトルです。あるいは vartype を使用して、指定したタイプの変数を選択する添字を作成することもできます。

拡張機能

バージョン履歴

R2006a より前に導入