Set intersection of two arrays
collapse all in page
Syntax
C = intersect(A,B)
C = intersect(A,B,setOrder)
C = intersect(A,B,___,'rows')
C = intersect(A,B,'rows',___)
[C,ia,ib]= intersect(___)
[C,ia,ib]= intersect(A,B,'legacy')
[C,ia,ib]= intersect(A,B,'rows','legacy')
Description
example
C = intersect(A,B)
returns the data common to both A
and B
, with no repetitions. C
is in sorted order.
If
A
andB
are tables or timetables, thenintersect
returns the set of rows common to both tables. For timetables,intersect
takes row times into account to determine equality, and sorts the output timetableC
by row times.
example
C = intersect(A,B,setOrder)
returns C
in a specific order. setOrder
can be 'sorted'
or 'stable'
.
C = intersect(A,B,___,'rows')
and
treat each row of C
= intersect(A,B
,'rows',___)A
and each row of B
as single entities and return the rows common to both A
and B
, with no repetitions. You must specify A
and B
and optionally can specify setOrder
.
The 'rows'
option does not support cell arrays, unless one of the inputs is either a categorical array or a datetime array.
example
[C,ia,ib]= intersect(___)
also returns index vectors ia
and ib
using any of the previous syntaxes.
Generally,
C = A(ia)
andC = B(ib)
.If the
'rows'
option is specified, thenC = A(ia,:)
andC = B(ib,:)
.If
A
andB
are tables or timetables, thenC = A(ia,:)
andC = B(ib,:)
.
example
[C,ia,ib]= intersect(A,B,'legacy')
and [
preserve the behavior of the C
,ia
,ib
]= intersect(A,B
,'rows','legacy')intersect
function from R2012b and prior releases.
The 'legacy'
option does not support categoricalarrays, datetime arrays, duration arrays, tables, or timetables.
Examples
collapse all
Intersection of Two Vectors
Open Live Script
Create two vectors that have some values in common.
A = [7 1 7 7 4]; B = [7 0 4 4 0];
Find the values common to both A
and B
.
C = intersect(A,B)
C = 1×2 4 7
Intersection of Two Tables
Open Live Script
Create two tables with rows in common.
A = table([1:5]',categorical({'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]',categorical({'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
Find the rows common to both A
and B
.
C = intersect(A,B)
C=3×3 table Var1 Var2 Var3 ____ ____ _____ 1 A false 3 C false 5 E false
Intersection of Two Vectors and Their Indices
Open Live Script
Create two vectors with values in common.
A = [7 1 7 7 4]; B = [7 0 4 4 0];
Find the values common to both A
and B
, as well as the index vectors ia
and ib
, such that C = A(ia)
and C = B(ib)
.
[C,ia,ib] = intersect(A,B)
C = 1×2 4 7
ia = 2×1 5 1
ib = 2×1 3 1
Intersection of Two Tables and Their Indices
Open Live Script
Create a table, A
, of gender, age, and height for five people.
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=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
Create a table, B
, with rows in common with A
.
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=4×3 table Gender Age Height ______ ___ ______ Meg F 31 64 Joe M 47 68 Beth F 35 62 Amy F 23 58
Find the rows common to both A
and B
, as well as the index vectors ia
and ib
, such that C = A(ia,:)
and C = B(ib,:)
.
[C,ia,ib] = intersect(A,B)
C=1×3 table Gender Age Height ______ ___ ______ Betty F 31 64
ia = 3
ib = 1
Two rows that have the same values, but different names, are considered equal. Therefore, we discover that Betty, A(3,:)
, and Meg, B(1,:)
have the same gender, age, and height.
Intersection of Rows in Two Matrices
Open Live Script
Create two matrices with rows in common.
A = [2 2 2; 0 0 1; 1 2 3; 1 1 1];B = [1 2 3; 2 2 2; 2 2 0];
Find the rows common to both A
and B
as well as the index vectors ia
and ib
, such that C = A(ia,:)
and C = B(ib,:)
.
[C,ia,ib] = intersect(A,B,'rows')
C = 2×3 1 2 3 2 2 2
ia = 2×1 3 1
ib = 2×1 1 2
A
and B
do not need to have the same number of rows, but they must have the same number of columns.
Intersection with Specified Output Order
Open Live Script
Use the setOrder
argument to specify the ordering of the values in C
.
Specify 'stable'
if you want the values in C
to have the same order as in A
.
A = [7 1 7 7 4]; B = [7 0 4 4 0];[C,ia,ib] = intersect(A,B,'stable')
C = 1×2 7 4
ia = 2×1 1 5
ib = 2×1 1 3
Alternatively, you can specify 'sorted'
order.
[C,ia,ib] = intersect(A,B,'sorted')
C = 1×2 4 7
ia = 2×1 5 1
ib = 2×1 3 1
Intersection of Vectors Containing NaNs
Open Live Script
Create two vectors containing NaN
.
A = [5 NaN NaN]; B = [5 NaN NaN];
Find the values common to both A
and B
.
C = intersect(A,B)
C = 5
intersect
treats NaN
values as distinct.
Cell Array of Character Vectors with Trailing White Space
Open Live Script
Create a cell array of character vectors, A
.
A = {'dog','cat','fish','horse'};
Create a cell array of character vectors, B
, where some of the vectors have trailing white space.
B = {'dog ','cat','fish ','horse'};
Find the character vectors common to both A
and B
.
[C,ia,ib] = intersect(A,B)
C = 1x2 cell {'cat'} {'horse'}
ia = 2×1 2 4
ib = 2×1 2 4
intersect
treats trailing white space in cell arrays of character vectors as distinct characters.
Intersection of Arrays of Different Classes and Shapes
Open Live Script
Create a column vector character array.
A = ['A';'B';'C'], class(A)
A = 3x1 char array 'A' 'B' 'C'
ans = 'char'
Create a 2-by-3 matrix containing elements of numeric type double
.
B = [65 66 67;68 69 70], class(B)
B = 2×3 65 66 67 68 69 70
ans = 'double'
Find the values common to both A
and B
.
[C,ia,ib] = intersect(A,B)
C = 3x1 char array 'A' 'B' 'C'
ia = 3×1 1 2 3
ib = 3×1 1 3 5
intersect
interprets B
as a character array and returns a character array, C
.
class(C)
ans = 'char'
Intersection of Char and Cell Array of Character Vectors
Open Live Script
Create a character vector containing animal names that have three letters.
A = ['dog';'cat';'fox';'pig'];class(A)
ans = 'char'
Create a cell array of character vectors containing animal names of varying lengths.
B = {'cat','dog','fish','horse'};class(B)
ans = 'cell'
Find the character vectors common to both A
and B
.
C = intersect(A,B)
C = 2x1 cell {'cat'} {'dog'}
The result, C
, is a cell array of character vectors.
class(C)
ans = 'cell'
Preserve Legacy Behavior of intersect
Open Live Script
Use the 'legacy'
flag to preserve the behavior of intersect
from R2012b and prior releases in your code.
Find the intersection of A
and B
with the current behavior.
A = [7 1 7 7 4]; B = [7 0 4 4 0];[C1,ia1,ib1] = intersect(A,B)
C1 = 1×2 4 7
ia1 = 2×1 5 1
ib1 = 2×1 3 1
Find the unique elements of A
and preserve the legacy behavior.
[C2,ia2,ib2] = intersect(A,B,'legacy')
C2 = 1×2 4 7
ia2 = 1×2 5 4
ib2 = 1×2 4 1
Input Arguments
collapse all
setOrder
— Order flag
'sorted'
(default) | 'stable'
Order flag, specified as 'sorted'
or 'stable'
, indicates the order of the values (or rows) in C
.
Flag | Description |
---|---|
'sorted' | The values (or rows) in Example C = intersect([7 0 1 5],[0 2 7 5],'sorted') C = 0 5 7 |
'stable' | The values (or rows) in Example C = intersect([7 0 1 5],[0 2 7 5],'stable') C = 7 0 5 |
Data Types: char
| string
Output Arguments
collapse all
C
— Data common to A
and B
vector | matrix | table | timetable
Data common to A
and B
, returned as a vector, matrix, or table. If the inputs A
and B
are tables or timetables, then the order of the variables in C
is the same as the order of the variables in A
.
The following describes the shape of C
when the inputs are vectors or matrices and when the 'legacy'
flag is not specified:
If the
'rows'
flag is not specified, thenC
is a column vector unless bothA
andB
are row vectors, in which caseC
is a row vector.If the
'rows'
flag is specified, thenC
is a matrix containing the rows in common fromA
andB
.
The class of the inputs A
and B
determinesthe class of C
:
If the class of
A
andB
arethe same, thenC
is the same class.If you combine a
char
or nondoublenumeric class withdouble
, thenC
isthe same class as the nondouble input.If you combine a
logical
classwithdouble
, thenC
isdouble
.If you combine a cell array of character vectors with
char
,thenC
is a cell array of character vectors.If you combine a categorical array with a charactervector, cell array of character vectors, or string, then
C
isa categorical array.If you combine a datetime array with a cell arrayof date character vectors or single date character vector, then
C
isa datetime array.If you combine a string array with a character vectoror cell array of character vectors, then
C
is astring array.
ia
— Index to A
column vector
Index to A
, returned as a column vector when the 'legacy'
flag is not specified. ia
identifies the values (or rows) in A
that are common to B
. If there is a repeated value (or row) in A
, then ia
contains the index to the first occurrence of the value (or row).
ib
— Index to B
column vector
Index to B
, returned as a column vector when the 'legacy'
flag is not specified. ib
identifies the values (or rows) in B
that are common to A
. If there is a repeated value (or row) in B
, then ib
contains the index to the first occurrence of the value (or row).
Tips
To find the intersection with respect to a subset of variables from a table or timetable, you can use column subscripting. For example, you can use
intersect(A(:,
, wherevars
),B(:,vars
))vars
is a positive integer, a vector of positive integers, a variable name, a cell array of variable names, or a logical vector. Alternatively, you can use vartype to create a subscript that selects variables of a specified type.
Extended Capabilities
Tall Arrays
Calculate with arrays that have more rows than fit in memory.
Usage notes and limitations:
The
'legacy'
flag is not supported.The
'stable'
flag is not supported when both inputs are tall arrays.Inputs of type
'char'
are not supported when both inputs are tall arrays.Ordinal categorical arrays are not supported.
For more information, see Tall Arrays.
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
Code generation does not support cell arrays for the first or second arguments.
When you do not specify the
'rows'
option:Inputs
A
andB
must be vectors. If you specify the'legacy'
option, inputsA
andB
must be row vectors.The first dimension of a variable-size row vector must have fixed length 1. The second dimension of a variable-size column vector must have fixed length 1.
The input
[]
is not supported. Use a 1-by-0 or 0-by-1 input, for example,zeros(1,0)
, to represent the empty set.If you specify the
'legacy'
option, then empty outputs are row vectors, 1-by-0. They are never 0-by-0.
When you specify both the
'legacy'
option and the'rows'
option, the outputsia
andib
are column vectors. If these outputs are empty, they are 0-by-1. They are never 0-by-0, even if the outputC
is 0-by-0.When the
setOrder
is'sorted'
or when you specify the'legacy'
option, the inputs must already be sorted in ascending order. The first output,C
, is sorted in ascending order.Complex inputs must be
single
ordouble
.When one input is complex and the other input is real, do one of the following:
Set
setOrder
to'stable'
.Sort the real input in complex ascending order (by absolute value). Suppose the real input is
x
. Usesort(complex(x))
orsortrows(complex(x))
.
See Code Generation for Complex Data with Zero-Valued Imaginary Parts (MATLAB Coder).
Thread-Based Environment
Run code in the background using MATLAB® backgroundPool
or accelerate code with Parallel Computing Toolbox™ ThreadPool
.
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
Usage notes and limitations:
The
'legacy'
flag is not supported.64-bit integers are not supported.
For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
Usage notes and limitations:
The
'legacy'
flag is not supported.Table, timetable, categorical, datetime and duration inputs are not supported.
Inputs of type
char
andstring
are not supported whenA
orB
is a cell array of character vectors. Convert cell arrays of character vectors input arguments to string arrays instead.
For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Version History
Introduced before R2006a
See Also
unique | union | ismember | issorted | setdiff | setxor | sort
Topics
- Combine Categorical Arrays
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
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:
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
- Deutsch
- English
- Français
- United Kingdom (English)
Contact your local office