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]',["red";"green";"blue";"cyan";"magenta"],logical([0;1;0;1;0]))
A=5×3 table
    Var1      Var2       Var3 
    ____    _________    _____

     1      "red"        false
     2      "green"      true 
     3      "blue"       false
     4      "cyan"       true 
     5      "magenta"    false

B = table([1:2:10]',["red";"blue";"magenta";"yellow";"black"],logical(zeros(5,1)))
B=5×3 table
    Var1      Var2       Var3 
    ____    _________    _____

     1      "red"        false
     3      "blue"       false
     5      "magenta"    false
     7      "yellow"     false
     9      "black"      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([true;true;false;true;false],[27;52;31;46;35],[74;68;64;61;64],...
VariableNames=["Smoker" "Age" "Height"],...
RowNames=["Sanchez" "Johnson" "Li" "Diaz" "Brown"])
A=5×3 table
               Smoker    Age    Height
               ______    ___    ______

    Sanchez    true      27       74  
    Johnson    true      52       68  
    Li         false     31       64  
    Diaz       true      46       61  
    Brown      false     35       64  

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

B = table([false;false;false;false],[47;31;35;23],[68;64;62;58],...
VariableNames=["Smoker" "Age" "Height"],...
RowNames=["Nguyen" "Cohen" "Jones" "Garcia"])
B=4×3 table
              Smoker    Age    Height
              ______    ___    ______

    Nguyen    false     47       68  
    Cohen     false     31       64  
    Jones     false     35       62  
    Garcia    false     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 つの table 行は、等しいと見なされます。Li の同じデータが B(2,:) にあります。これは Cohen に対応しています。

共通の行をもつ 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 値を個別のものとして処理します。

string 配列 A を作成します。

A = ["dog","cat","fish","horse"];

一部の要素の末尾に空白文字があるもう 1 つの string 配列 B を作成します。

B = ["dog ","cat","fish ","horse"];

B にもある A 内の string を判別します。

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

   0   1   0   1

Locb = 1×4

     0     2     0     4

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

"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

入力引数

すべて折りたたむ

クエリ配列。配列、table または timetable として指定します。"rows" オプションを指定した場合、A および B は同じ数の列をもたなければなりません。

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

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

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

  • categorical 配列は、string スカラーおよび文字ベクトルと組み合わせることができます。

  • datetime 配列は、日付と時刻を表すように書式設定された string 配列、string スカラーおよび文字ベクトルと組み合わせることができます。

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

  • A が categorical 配列の場合、B は categorical 配列または string 配列のいずれかにすることができます。この場合、2 番目の入力 B はカテゴリ名のセットです。

  • AB の両方が順序 categorical 配列である場合は、順序を含めて同じカテゴリ セットでなければなりません。

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

  • A が table または timetable の場合は、順序を除き、B と同じ変数名でなければなりません。

    • table の場合、行名は無視されるため、値が同じで名前が異なる 2 つの行は等しいと見なされます。

    • timetable の場合、行時間が考慮されるため、値が同じで時間が異なる 2 つの行は、等しくないと見なされます。

  • AB が datetime 配列の場合、どちらもタイム ゾーンを指定するか、どちらもゾーンなしでなければなりません。

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

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

  • eq

  • ne

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

集合配列。配列、table または timetable として指定します。"rows" オプションを指定した場合、A および B は同じ数の列をもたなければなりません。

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

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

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

  • categorical 配列は、string スカラーおよび文字ベクトルと組み合わせることができます。

  • datetime 配列は、日付と時刻を表すように書式設定された string 配列、string スカラーまたは文字ベクトルと組み合わせることができます。

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

  • A が categorical 配列の場合、B は categorical 配列または string 配列のいずれかにすることができます。この場合、2 番目の入力 B はカテゴリ名のセットです。

  • AB の両方が順序 categorical 配列である場合は、順序を含めて同じカテゴリ セットでなければなりません。

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

  • A が table または timetable の場合は、順序を除き、B と同じ変数名でなければなりません。

    • table の場合、行名は無視されるため、値が同じで名前が異なる 2 つの行は等しいと見なされます。

    • timetable の場合、行時間が考慮されるため、値が同じで時間が異なる 2 つの行は、等しくないと見なされます。

  • AB が datetime 配列の場合、どちらもタイム ゾーンを指定するか、どちらもゾーンなしでなければなりません。

また、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 は、正の整数、正の整数のベクトル、変数名、変数名の string 配列か cell 配列、または logical ベクトルです。あるいは vartype を使用して、指定したタイプの変数を選択する添字を作成することもできます。

拡張機能

バージョン履歴

R2006a より前に導入