ドキュメンテーション

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

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

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

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

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

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

  • AB が数値配列、論理配列、文字配列、カテゴリカル配列、datetime 配列、duration 配列、文字列のセル配列の場合、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' または 'stable' の値を取ります。

  • 'sorted'C はソート順序となります。これは既定値です。

  • 'stable'CA と同じ順序になります。

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

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

すべて折りたたむ

いくつかの共有の値をもつ 2 つのベクトルを作成します。

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

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

C = intersect(A,B)
C =

     4     7

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

A = table([1:5]',categorical({'A';'B';'C';'D';'E'}),logical([0;1;0;1;0]))
A = 

    Var1    Var2    Var3 
    ____    ____    _____

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

B = table([1:2:10]',categorical({'A';'C';'E';'G';'I'}),logical(zeros(5,1)))
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 つのベクトルを作成します。

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

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

A = table(categorical({'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(categorical({'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 つの行列を作成します。

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 を含む 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

'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

入力引数

すべて折りたたむ

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

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

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

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

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

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

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

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

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

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

さらに、A および B は次のクラス メソッドをもつオブジェクトにすることができます。

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

  • ne

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

'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] を返します。

出力引数

すべて折りたたむ

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

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

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

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

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

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

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

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

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

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

  • datetime 配列を日付文字列のセル配列または単一の日付文字列と組み合わせる場合、C は datetime 配列です。

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

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

詳細

すべて折りたたむ

ヒント

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

R2006a より前に導入

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