このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
setdiff
2 つの配列の差集合
構文
説明
例
2 つのベクトルの差
共通の値をもつ 2 つのベクトルを定義します。
A = [3 6 2 1 5 1 1]; B = [2 4 6];
B
内になく A
内にある値を検索します。
C = setdiff(A,B)
C = 1×3
1 3 5
2 つのテーブルの差
共通の行をもつ 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
内にある行を求めます。
C = setdiff(A,B)
C=2×3 table
Var1 Var2 Var3
____ ____ _____
2 B true
4 D true
2 つのベクトルの差と異なる値へのインデックス
共通の値をもつ 2 つのベクトルを定義します。
A = [3 6 2 1 5 1 1]; B = [2 4 6];
B
になく A
にある値と、C = A(ia)
となるインデックス ベクトル ia
を求めます。
[C,ia] = setdiff(A,B)
C = 1×3
1 3 5
ia = 3×1
4
1
5
2 つのテーブルの差と異なる行へのインデックス
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
と同じ変数をもつ table B
を定義します。
B = table(['F';'M';'F';'F'],[64;68;62;58],[31;47;35;23],... 'VariableNames',{'Gender' 'Height' 'Age'},... 'RowNames',{'Meg' 'Joe' 'Beth' 'Amy'})
B=4×3 table
Gender Height Age
______ ______ ___
Meg F 64 31
Joe M 68 47
Beth F 62 35
Amy F 58 23
B
になく A
にある行と、C = A(ia,:)
となるインデックス ベクトル ia
を求めます。
[C,ia] = setdiff(A,B)
C=4×3 table
Gender Age Height
______ ___ ______
Judy F 35 64
Ted M 27 74
Bob M 46 61
Fred M 52 68
ia = 4×1
5
1
4
2
C
の行は、最初に Gender
、その次に Age
による並べ替え順になります。
2 つの行列の行の差
共通の行をもつ 2 つの行列を定義します。
A = [7 9 7; 0 0 0; 7 9 7; 5 5 5; 1 4 5]; B = [0 0 0; 5 5 5];
B
になく A
にある行と、C = A(ia,:)
となるインデックス ベクトル ia
を求めます。
[C,ia] = setdiff(A,B,'rows')
C = 2×3
1 4 5
7 9 7
ia = 2×1
5
1
指定した出力順序の 2 つのベクトルの差
setOrder
引数を使って C
の値の順序を指定します。
C
内の値の順序が重要なときには、'stable'
または 'sorted'
を指定します。
A = [3 6 2 1 5 1 1];
B = [2 4 6];
[C,ia] = setdiff(A,B,'stable')
C = 1×3
3 1 5
ia = 3×1
1
4
5
または、関数 'sorted'
を指定できます。
[C,ia] = setdiff(A,B,'sorted')
C = 1×3
1 3 5
ia = 3×1
4
1
5
NaN を含むベクトルの差
NaN
を含む 2 つのベクトルを定義します。
A = [5 NaN NaN]; B = [5 NaN];
A
と B
の差集合を検索します。
C = setdiff(A,B)
C = 1×2
NaN NaN
setdiff
は NaN
値を個別のものとして処理します。
末尾が空白文字の文字ベクトルの cell 配列
文字ベクトルの cell 配列 A
を作成します。
A = {'dog','cat','fish','horse'};
文字ベクトルの cell 配列 B
を作成します。一部のベクトルは末尾に空白文字があります。
B = {'dog ','cat','fish ','horse'};
B
にない A
の文字ベクトルを見つけます。
[C,ia] = setdiff(A,B)
C = 1x2 cell
{'dog'} {'fish'}
ia = 2×1
1
3
setdiff
は、文字ベクトルの cell 配列内の末尾の空白文字を別個の文字として処理します。
文字と文字ベクトルの cell 配列の差
文字ベクトル A
を作成します。
A = ['cat';'dog';'fox';'pig']; class(A)
ans = 'char'
文字ベクトルの cell 配列 B
を作成します。
B={'dog','cat','fish','horse'}; class(B)
ans = 'cell'
B
にない A
の文字ベクトルを見つけます。
C = setdiff(A,B)
C = 2x1 cell
{'fox'}
{'pig'}
結果の C
は、文字ベクトルの cell 配列になります。
class(C)
ans = 'cell'
setdiff のレガシ動作の保持
'legacy'
フラグを使用して、コード内の R2012b およびそれ以前のリリースの setdiff
の動作を保持します。
現在の動作における A
と B
の差を検出します。
A = [3 6 2 1 5 1 1]; B = [2 4 6]; [C1,ia1] = setdiff(A,B)
C1 = 1×3
1 3 5
ia1 = 3×1
4
1
5
A
と B
の差を検出し、レガシ動作を維持します。
[C2,ia2] = setdiff(A,B,'legacy')
C2 = 1×3
1 3 5
ia2 = 1×3
7 1 5
入力引数
A,B
— 入力配列
配列
入力配列。'rows'
オプションを指定する場合、A
と B
の列数は同じでなければなりません。
A
および B
は次の例外を伴う同一クラスに属していなければなりません。
logical
、char
、およびすべての数値クラスはdouble
配列と組み合わせることができます。文字ベクトルの cell 配列は、文字配列または string 配列と組み合わせることができます。
categorical 配列は、文字配列、文字ベクトルの cell 配列または string 配列と組み合わせることができます。
datetime 配列は、日付文字ベクトルの cell 配列または単一の日付文字ベクトルと組み合わせることができます。
A
と B
には、データ型に基づく追加の要件があります。
A
とB
の両方が順序 categorical 配列である場合は、順序を含めて同じカテゴリ セットでなければなりません。A
とB
の両方が順序配列でない場合、同じカテゴリ セットをもつ必要はなく、カテゴリ名を使用して比較が実行されます。この場合、C
のカテゴリは、A
のカテゴリの後にA
にないB
のカテゴリを並べて構成されます。カテゴリの順序はA
およびB
と同じでなければならず、そのカテゴリの順序がC
の並べ替えに使用されます。A
とB
が table または timetable の場合、その変数名は同じでなければなりません (順序は除く)。table の場合、行名は無視されるため、値が同じで名前が異なる 2 つの行は等しいと見なされます。timetable の場合、行時間が考慮されるため、値が同じで時間が異なる 2 つの行は、等しくないと見なされます。A
とB
が datetime 配列の場合、タイム ゾーンの指定が互いに一貫していなければなりません。
また、A
および B
は次のクラス メソッドをもつオブジェクトにすることもできます。
sort
(または'rows'
オプションのsortrows
)eq
ne
オブジェクト クラスのメソッドは、相互に一貫していなければなりません。これらのオブジェクトは、同じルート クラスから導出した異種混合配列を含みます。たとえば、A
および B
はグラフィックス オブジェクトのハンドルの配列にすることができます。
setOrder
— 順序フラグ
'sorted'
(既定値) | 'stable'
'sorted'
または 'stable'
として指定される順序フラグは、C
で値 (または行) の順序を示します。
フラグ | 説明 |
---|---|
'sorted' |
例 C = setdiff([4 1 3 2 5],[2 1],'sorted') C = 3 4 5 |
'stable' |
例 C = setdiff([4 1 3 2 5],[2 1],'stable') C = 4 3 5 |
データ型: char
| string
出力引数
C
— A
と B
の差
ベクトル | 行列 | table | timetable
A
と B
の差。ベクトル、行列、table または timetable として返されます。入力 A
および B
が table または timetable の場合、C
の変数の順番は、A
の変数の順番と同じになります。
入力がベクトルまたは行列で、'legacy'
フラグを指定していないときの C
の形状を次に説明します。
'rows'
フラグを指定しておらず、A
が行ベクトルの場合、C
は行ベクトルです。'rows'
フラグを指定しておらず、A
が行ベクトルでない場合、C
は列ベクトルです。'rows'
を指定した場合、C
は、B
には含まれないA
の行を含む行列です。A
のすべての値 (または行) がB
にも存在する場合、C
は空行列です。
C
のクラスは、以下の場合を除き、A
のクラスと同じです。
A
が文字配列で、B
が文字ベクトルの cell 配列の場合、C
は文字ベクトルの cell 配列です。A
が文字ベクトル、文字ベクトルの cell 配列または string で、B
が categorical 配列の場合、C
は categorical 配列です。A
が文字ベクトルの cell 配列または単一の文字ベクトルで、B
が datetime 配列の場合、C
は datetime 配列です。A
が文字ベクトルまたは文字ベクトルの cell 配列で、B
が string 配列の場合、C
は string 配列です。
ia
— A
のインデックス
列ベクトル
'legacy'
フラグを指定していないときに列ベクトルとして返される、A
へのインデックス。ia
は、B
と共通でない、A
内の値 (または行) を特定します。A
内だけに出現する繰り返しの値 (または行) がある場合、ia
は値 (または行) の最初の出現位置に対するインデックスを含みます。
ヒント
table または timetable の変数のサブセットに関する差集合を求めるには、列の添字を使用できます。たとえば、
setdiff(A(:,
を使用できます。ここで、vars
),B(:,vars
))vars
は、正の整数、正の整数のベクトル、変数名、変数名の cell 配列または logical ベクトルです。あるいはvartype
を使用して、指定したタイプの変数を選択する添字を作成することもできます。
拡張機能
tall 配列
メモリの許容量を超えるような多数の行を含む配列を計算します。
使用上の注意事項および制限事項:
'stable'
オプションおよび'legacy'
オプションはサポートされません。'char'
型の入力はサポートされていません。順序 categorical 配列はサポートされません。
詳細については、tall 配列を参照してください。
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意事項および制限事項:
コード生成は最初および 2 番目の引数の cell 配列をサポートしません。
'rows'
オプションを指定しない場合、以下の点に注意してください。入力
A
およびB
はベクトルでなければなりません。'legacy'
オプションを指定した場合、入力A
およびB
は行ベクトルでなければなりません。可変サイズの行ベクトルで最初の次元は固定長 1 でなければなりません。可変サイズの列ベクトルで 2 番目の次元は固定長 1 でなければなりません。
[]
を使用して空集合を表さないでください。1 行 0 列または 0 行 1 列の入力 (zeros(1,0)
など) を使用して、空集合を表します。'legacy'
オプションを指定した場合、空の出力は 1 行 0 列の行ベクトルになります。0 行 0 列にはなりません。
'legacy'
オプションと'rows'
オプションの両方を指定した場合、出力ia
は列ベクトルになります。ia
が空の場合、0 行 1 列となります。0 行 0 列にはなりません。出力C
が 0 行 0 列であっても同様です。setOrder
が'stable'
ではないか、'legacy'
オプションを指定した場合、入力はあらかじめ昇順で並べ替えられていなければなりません。最初の出力C
は、昇順で並べ替えられています。複素数入力は、
single
またはdouble
でなければなりません。一方の入力が複素数でもう一方の入力が実数の場合は、以下のいずれかを実行します。
setOrder
を'stable'
に設定します。実数入力を複素数の昇順 (絶対値) で並べ替えます。実数入力が
x
と仮定します。sort(complex(x))
またはsortrows(complex(x))
を使用します。
ゼロ値の虚数部をもつ複素数データのコード生成 (MATLAB Coder)を参照してください。
スレッドベースの環境
MATLAB® の backgroundPool
を使用してバックグラウンドでコードを実行するか、Parallel Computing Toolbox™ の ThreadPool
を使用してコードを高速化します。
この関数はスレッドベースの環境を完全にサポートしています。詳細については、スレッドベースの環境での MATLAB 関数の実行を参照してください。
GPU 配列
Parallel Computing Toolbox™ を使用してグラフィックス処理装置 (GPU) 上で実行することにより、コードを高速化します。
使用上の注意事項および制限事項:
'legacy'
フラグはサポートされていません。64 ビット整数はサポートされません。
詳細については、GPU での MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
分散配列
Parallel Computing Toolbox™ を使用して、クラスターの結合メモリ上で大きなアレイを分割します。
使用上の注意事項および制限事項:
'legacy'
フラグはサポートされていません。table 入力、timetable 入力、categorical 入力、datetime 入力、duration 入力はサポートされていません。
A
またはB
が文字ベクトルの cell 配列の場合、char
型とstring
型の入力はサポートされていません。代わりに、文字ベクトル入力引数の cell 配列を string 配列に変換します。
詳細については、分散配列を使用した MATLAB 関数の実行 (Parallel Computing Toolbox)を参照してください。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)