ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

intersect

2 つの配列の積集合

構文

  • C = intersect(A,B)
  • C = intersect(A,B,'rows')
  • [C,ia,ib] = intersect(A,B)
  • [C,ia,ib] = intersect(A,B,'rows')
  • [C,ia,ib] = intersect(___,setOrder)
  • [C,ia,ib] = intersect(A,B,'legacy')
  • [C,ia,ib] = intersect(A,B,'rows','legacy')

説明

C = intersect(A,B) は、AB の両方に共通しているデータを繰り返さずに返します。

  • AB が数値配列、論理配列、文字配列、カテゴリカル配列、文字列のセル配列の場合、intersect は、AB の両方に共通する値を返します。C の値は並べ替えられた順序になっています。

  • AB がテーブルの場合、intersect は、両方のテーブルに共通する行のセットを返します。テーブル C の行は並べ替えられた順序になっています。

C = intersect(A,B,'rows') は、AB の各行を 1 つのエンティティとして扱い、AB の両方に共通の行を返します。C の行は並べ替えられた順序になっています。

'rows' オプションはセル配列をサポートしません。

[C,ia,ib] = intersect(A,B) は、インデックス ベクトル ia および ib も返します。

  • AB が数値配列、論理配列、文字配列、カテゴリカル配列、文字列のセル配列の場合、C = A(ia)C = B(ib) です。

  • AB がテーブルの場合、C = A(ia,:)C = B(ib,:) です。

[C,ia,ib] = intersect(A,B,'rows') は、C = A(ia,:) および C = B(ib,:) であるようなインデックス ベクトル ia および ib も返します。

[C,ia,ib] = intersect(___,setOrder) は前出の構文の入力引数のいずれかを使用して特定の順序で C を返します。setOrder='sorted' は並べ替えられた順序で C の値 (または行) を返します。setOrder='stable'A、さらに B と同じ順序で C の値 (または行) を返します。値が指定されていない場合、既定値は 'sorted' です。

[C,ia,ib] = intersect(A,B,'legacy')[C,ia,ib] = intersect(A,B,'rows','legacy') は、R2012b 以前のリリースの関数 intersect の動作を保持します。

'legacy' オプションはカテゴリカル配列またはテーブルをサポートしません。

すべて展開する

2 つのベクトルの共通部分

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

A = [7 1 7 7 4]; B = [7 0 4 4 0];

AB の両方に共通する値を検出します。

C = intersect(A,B)
C =

     4     7

2 つのテーブルの共通部分

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

A = table([1:5]',['A';'B';'C';'D';'E'],logical([0;1;0;1;0]))
B = table([1:2:10]',['A';'C';'E';'G';'I'],logical(zeros(5,1)))
A = 

    Var1    Var2    Var3 
    ----    ----    -----
    1       A       false
    2       B       true 
    3       C       false
    4       D       true 
    5       E       false


B = 

    Var1    Var2    Var3 
    ----    ----    -----
    1       A       false
    3       C       false
    5       E       false
    7       G       false
    9       I       false

AB の両方に共通する行を検出します。

C = intersect(A,B)
C = 

    Var1    Var2    Var3 
    ----    ----    -----
    1       A       false
    3       C       false
    5       E       false

2 つのベクトルの共通集合とインデックス

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

A = [7 1 7 7 4]; B = [7 0 4 4 0];

AB の両方で共通する値を、C = A(ia)C = B(ib) のようなインデックス ベクトル ia および ib と共に検出します。

[C,ia,ib] = intersect(A,B)
C =

     4     7


ia =

     5
     1


ib =

     3
     1

2 つのテーブルの共通部分とそのインデックス

5 人の性別、年齢および身長のテーブル 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 = 

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

A と共通する行をもつテーブル B を定義します。

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

            Gender    Age    Height
            ------    ---    ------
    Meg     F         31     64    
    Joe     M         47     68    
    Beth    F         35     62    
    Amy     F         23     58    

AB の両方で共通する行を、C = A(ia,:)C = B(ib,:) のようなインデックス ベクトル ia および ib と共に検出します。

[C,ia,ib] = intersect(A,B)
C = 

             Gender    Age    Height
             ------    ---    ------
    Betty    F         31     64    


ia =

     3


ib =

     1

値が同じで名前が異なる 2 つの行は、等しいと見なされます。したがって、Betty A(3,:) と Meg B(1,:) は、性別、年齢、身長が同じと検出されます。

2 つの行列の行の共通集合

共通の行をもつ 2 つの行列を定義します。

A = [2 2 2; 0 0 1; 1 2 3; 1 1 1];
B = [1 2 3; 2 2 2; 2 2 0];

AB の両方に共通する行や、C = A(ia,:)C = B(ib,:) のようなインデックス ベクトル ia および ib を見つけます。

[C,ia,ib] = intersect(A,B,'rows')
C =

     1     2     3
     2     2     2


ia =

     3
     1


ib =

     1
     2

AB を同じ行数にする必要はありませんが、同じ列数にしなければなりません。

指定した出力順序の共通集合

setOrder 引数を使って C の値の順序を指定します。

C の値を A の値と同じ順序にする場合、'stable' を指定します。

A = [7 1 7 7 4]; B = [7 0 4 4 0];
[C,ia,ib] = intersect(A,B,'stable')
C =

     7     4


ia =

     1
     5


ib =

     1
     3

または、関数 'sorted' を指定できます。

[C,ia,ib] = intersect(A,B,'sorted')
C =

     4     7


ia =

     5
     1


ib =

     3
     1

NaN を含むベクトルの共通集合

NaN を含む 2 つのベクトルを定義します。

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

AB の両方に共通する値を検出します。

C = intersect(A,B)
C =

     5

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

末尾に空白文字がある文字列のセル配列

文字列のセル配列 A を作成します。

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

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

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

AB の両方に共通する文字列を検出します。

[C,ia,ib] = intersect(A,B)
C = 

    'cat'    'horse'


ia =

     2
     4


ib =

     2
     4

intersect は、文字列のセル配列内の末尾の空白文字を別個の文字として処理します。

異なるクラスと形状の配列の共通集合

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

A = ['A';'B';'C'], class(A)

A =

A
B
C


ans =

char

数値型 double の要素を含む 2 行 3 列の行列を作成します。

B = [65 66 67;68 69 70], class(B)

B =

    65    66    67
    68    69    70


ans =

double

AB の両方に共通する値を検出します。

[C,ia,ib] = intersect(A,B)

C =

A
B
C


ia =

     1
     2
     3


ib =

     1
     3
     5

intersectB を文字配列として解釈し、文字配列 C を返します。

class(C)
ans =

char

文字配列と文字列のセル配列の共通集合

3 文字の動物の名前を含む文字配列を作成します。

A = ['dog';'cat';'fox';'pig'];
class(A)
ans =

char

さまざまな長さの動物の名前を含む文字列のセル配列を作成します。

B = {'cat','dog','fish','horse'};
class(B)
ans =

cell

AB の両方に共通する文字列を検出します。

C = intersect(A,B)
C = 

    'cat'
    'dog'

結果 C は文字列のセル配列です。

class(C)
ans =

cell

intersect のレガシ動作の保持

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

現在の動作における AB の共通集合を検出します。

A = [7 1 7 7 4]; B = [7 0 4 4 0];
[C1,ia1,ib1] = intersect(A,B)
C1 =

     4     7


ia1 =

     5
     1


ib1 =

     3
     1

A の固有の要素を検出し、レガシ動作を保持します。

[C2,ia2,ib2] = intersect(A,B,'legacy')
C2 =

     4     7


ia2 =

     5     4


ib2 =

     4     1

入力引数

すべて展開する

A,B - 入力配列数値配列 | 論理配列 | 文字配列 | カテゴリカル配列 | 文字列のセル配列 | テーブル

入力配列。数値配列、論理配列、文字配列、カテゴリカル配列、文字列のセル配列またはテーブルとして指定します。

A および B は次の例外を伴う同一クラスのものでなければなりません。

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

  • 文字列のセル配列は char 配列と組み合わせることができます。

  • カテゴリカル配列は、文字列のセル配列または単一の文字列と組み合わせることができます。

AB の両方が順序カテゴリカル配列である場合は、順序を含めて同じカテゴリ セットでなければなりません。AB の両方が順序配列でない場合、同じカテゴリ セットをもつ必要はなく、カテゴリ名を使用して比較が実行されます。この場合、C のカテゴリは、A および B からのカテゴリの和集合を並べ替えたものになります。

'rows' オプションを指定した場合、A および B は同じ数の列をもたなければなりません。

AB がテーブルの場合、その変数名は同じでなければなりません。反対に、行の名前は問題ではありません。値が等しい 2 つの行は、名前が異なっていても等しいと見なされます。

また、A および B として次のクラス メソッドをもつオブジェクトも可能です。

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

  • ne

オブジェクト クラスのメソッドは、相互に一貫していなければなりません。これらのオブジェクトは、同じルート クラスから導出した異なるタイプの配列を含みます。

setOrder - 順序フラグ'sorted' (既定の設定) | 'stable'

'sorted' または 'stable' として指定される順序フラグは、C で値 (または行) の順序を示します。

順序フラグ意味
'sorted'C の値 (または行) は並べ替えられた順序で返されます。以下に例を示します。 C = intersect([7 0 5],[7 1 5],'sorted')C = [5 7] を返します。
'stable'C の値 (または行) は A および B で表示されるのと同じ順序で返されます。以下に例を示します。C = intersect([7 0 5],[7 1 5],'stable')C = [7 5] を返します。

出力引数

すべて展開する

C - AB で共通するデータベクトル | 行列 | テーブル

AB で共通するデータ。ベクトル、行列またはテーブルとして返されます。入力 A および B がテーブルの場合、生成されるテーブル C の変数の順番は、A の変数の順番と同じになります。

入力がベクトルまたは行列で、'legacy' フラグが指定されていないときの C の形状は、次になります。

  • 'rows' フラグを指定していない場合、AB の両方が行ベクトルでない限り、C は列ベクトルです。

  • 'rows' フラグを指定していないときに AB の両方が行ベクトルである場合、C は行ベクトルです。

  • 'rows' フラグを指定した場合、C は、AB に共通の行を含む行列です。

  • AB が共通の値 (または行) をもたない場合、C は空行列です。

AB の入力のクラスによって、C のクラスが決まります。

  • AB のクラスが同じである場合、C は同じクラスになります。

  • char または非倍精度数値クラスを double と組み合わせる場合、C は非倍精度入力と同じクラスになります。

  • logical クラスを double と組み合わせる場合、Cdouble になります。

  • 文字列のセル配列を char と組み合わせる場合、C は文字列のセル配列になります。

  • カテゴリカル配列を文字列のセル配列または単一の文字列と組み合わせた場合、C はカテゴリカル配列になります。

ia - A へのインデックス列ベクトル

'legacy' フラグを指定していないときに列ベクトルとして返される、A へのインデックス。iaは、B と共通する、A 内の値 (または行) を特定します。A に繰り返しの値 (または行) がある場合、ia は値 (または行) の最初の発生に対するインデックスを含みます。

ib - B へのインデックス列ベクトル

'legacy' フラグを指定していないときに列ベクトルとして返される、B へのインデックス。ibは、A と共通する、B 内の値 (または行) を特定します。B に繰り返しの値 (または行) がある場合、ib は値 (または行) の最初の発生に対するインデックスを含みます。

詳細

すべて展開する

ヒント

  • テーブルの変数のサブセットに関する共通部分を検出するには、列の添字を使用できます。たとえば、intersect(A(:,vars),B(:,vars)) を使用できます。ここで、vars は、正の整数、正の整数のベクトル、変数名、変数名のセル配列または論理ベクトルです。

参考

| | | | | |

この情報は役に立ちましたか?