设置两个数组的交集
全页折叠
语法
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')
说明
示例
C = intersect(A,B)
返回 A
和 B
的共有数据,但是不包含重复项。C
已排序。
如果
A
和B
是表或时间表,intersect
将返回这两个表的共有行集。对于时间表,intersect
在确定相等性时会考虑行时间,并按行时间对输出时间表C
进行排序。
示例
C = intersect(A,B,setOrder)
以特定顺序返回 C
。setOrder
可以是 'sorted'
或 'stable'
。
C = intersect(A,B,___,'rows')
和
将 C
= intersect(A,B
,'rows',___)A
和 B
的每一行都视为单个实体,并返回 A
和 B
的共有行,但是不包含重复项。必须指定 A
和 B
,setOrder
是可选的。
'rows'
选项不支持元胞数组,除非其中一个输入项为分类数组或日期时间数组。
示例
[C,ia,ib] = intersect(___)
支持任何上述语法,且可返回索引向量 ia
和 ib
。
一般情况下,
C = A(ia)
且C = B(ib)
。如果指定了
'rows'
选项,则C = A(ia,:)
且C = B(ib,:)
。如果
A
和B
是表或时间表,则C = A(ia,:)
且C = B(ib,:)
。
示例
[C,ia,ib] = intersect(A,B,'legacy')
和 [
保留 R2012b 和早期版本中 C
,ia
,ib
] = intersect(A,B
,'rows','legacy')intersect
函数的行为。
'legacy'
选项不支持分类数组、日期时间数组、持续时间数组、表或时间表。
示例
全部折叠
两个向量的交集
打开实时脚本
创建两个具有某些相同值的向量。
A = [7 1 7 7 4]; B = [7 0 4 4 0];
查找 A
和 B
的共有值。
C = intersect(A,B)
C = 1×2 4 7
两个表的交集
打开实时脚本
创建都包含某些行的两个表。
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
查找 A
和 B
的共有行。
C = intersect(A,B)
C=3×3 table Var1 Var2 Var3 ____ ____ _____ 1 A false 3 C false 5 E false
两个向量及其索引的交集
打开实时脚本
创建都包含某些值的两个向量。
A = [7 1 7 7 4]; B = [7 0 4 4 0];
查找 A
与 B
以及索引向量 ia
与 ib
的共有值,使得 C = A(ia)
并且 C = B(ib)
。
[C,ia,ib] = intersect(A,B)
C = 1×2 4 7
ia = 2×1 5 1
ib = 2×1 3 1
两个表及其索引的交集
打开实时脚本
创建表 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=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
具有共有行的表 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=4×3 table Gender Age Height ______ ___ ______ Meg F 31 64 Joe M 47 68 Beth F 35 62 Amy F 23 58
查找 A
与 B
以及索引向量 ia
和 ib
的共有行,使得 C = A(ia,:)
并且 C = B(ib,:)
。
[C,ia,ib] = intersect(A,B)
C=1×3 table Gender Age Height ______ ___ ______ Betty F 31 64
ia = 3
ib = 1
值相同而名称不同的两行将被视为相等。因此,我们发现 Betty A(3,:)
和 Meg, B(1,:)
的性别、年龄及身高都相同。
两个矩阵中的行的交集
打开实时脚本
创建两个包含共有行的矩阵。
A = [2 2 2; 0 0 1; 1 2 3; 1 1 1];B = [1 2 3; 2 2 2; 2 2 0];
查找 A
与 B
以及索引向量 ia
和 ib
的共有行,使得 C = A(ia,:)
并且 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
和 B
的行数无需相同,但列数必须相同。
具有指定输出顺序的交集
打开实时脚本
使用 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 = 1×2 7 4
ia = 2×1 1 5
ib = 2×1 1 3
此外,还可以指定 'sorted'
顺序。
[C,ia,ib] = intersect(A,B,'sorted')
C = 1×2 4 7
ia = 2×1 5 1
ib = 2×1 3 1
包含 NaN 的向量的交集
打开实时脚本
创建两个包含 NaN
的向量。
A = [5 NaN NaN]; B = [5 NaN NaN];
查找 A
和 B
的共有值。
C = intersect(A,B)
C = 5
intersect
将 NaN
值视为不同的值。
带有尾随空白的字符向量元胞数组
打开实时脚本
创建字符向量元胞数组 A
。
A = {'dog','cat','fish','horse'};
创建字符向量元胞数组 B
,其中某些向量带有尾随空白。
B = {'dog ','cat','fish ','horse'};
找出 A
和 B
的共有字符向量。
[C,ia,ib] = intersect(A,B)
C = 1x2 cell {'cat'} {'horse'}
ia = 2×1 2 4
ib = 2×1 2 4
intersect
将字符向量元胞数组中的尾随空白视为不同的字符。
具有不同类和形状的数组的交集
打开实时脚本
创建一个列向量字符数组。
A = ['A';'B';'C'], class(A)
A = 3x1 char array 'A' 'B' 'C'
ans = 'char'
创建一个包含数值类型 double
的元素的 2×3 矩阵。
B = [65 66 67;68 69 70], class(B)
B = 2×3 65 66 67 68 69 70
ans = 'double'
查找 A
和 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
将 B
解释为字符数组并返回字符数组 C
。
class(C)
ans = 'char'
字符和字符向量元胞数组的交集
打开实时脚本
创建包含三个字母的动物名称的字符向量。
A = ['dog';'cat';'fox';'pig'];class(A)
ans = 'char'
创建包含不同长度的动物名称的字符向量元胞数组。
B = {'cat','dog','fish','horse'};class(B)
ans = 'cell'
找出 A
和 B
的共有字符向量。
C = intersect(A,B)
C = 2x1 cell {'cat'} {'dog'}
结果 C
是字符向量元胞数组。
class(C)
ans = 'cell'
保留 intersect 的旧版行为
打开实时脚本
在代码中使用 'legacy'
标志以保留 R2012b 和早期版本中 intersect
的行为。
使用当前行为查找 A
和 B
的交集。
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
查找 A
的唯一元素并保留旧版行为。
[C2,ia2,ib2] = intersect(A,B,'legacy')
C2 = 1×2 4 7
ia2 = 1×2 5 4
ib2 = 1×2 4 1
输入参数
全部折叠
setOrder
— 顺序标志
'sorted'
(默认) | 'stable'
顺序标志以 'sorted'
或 'stable'
指定,指示 C
中值(或行)的顺序。
标志 | 描述 |
---|---|
'sorted' | 按 sort 返回的排序顺序返回 示例 C = intersect([7 0 1 5],[0 2 7 5],'sorted') C = 0 5 7 |
'stable' |
示例 C = intersect([7 0 1 5],[0 2 7 5],'stable') C = 7 0 5 |
数据类型: char
| string
输出参量
全部折叠
C
— A
和 B
的共有数据
向量 | 矩阵 | 表 | 时间表
A
和 B
的共有数据,以向量、矩阵或表的形式返回。如果输入 A
和 B
是表或时间表,则 C
中的变量顺序与 A
中的变量顺序相同。
下面介绍了当输入为向量或矩阵并且未指定 'legacy'
标志时 C
的形状:
如果未指定
'rows'
标志,则C
为列向量,除非A
和B
都是行向量,在这种情况下,C
为行向量。如果指定了
'rows'
标志,则C
是一个包含A
和B
共用的行的矩阵。
输入 A
和 B
的类确定 C
的类:
如果
A
和B
的类相同,则C
为相同类。如果将
char
或非双精度数值类与double
合并,则C
是与非双精度输入相同的类。如果将
logical
类与double
合并,则C
是double
。如果将字符向量元胞数组与
char
合并,则C
是字符向量元胞数组。如果将分类数组与字符向量、字符向量元胞数组或字符串合并,则
C
是分类数组。如果将日期时间数组与日期字符向量元胞数组或单个日期字符向量合并,则
C
是日期时间数组。如果将字符串数组与字符向量或字符向量元胞数组合并,则
C
是字符串数组。
ia
— A
的索引
列向量
A
的索引,当未指定 'legacy'
标志时以列向量的形式返回。ia
标识 A
中与 B
共有的值(或行)。如果 A
中存在重复出现的值(或行),则 ia
包含该值(或行)第一次出现位置的索引。
ib
— B
的索引
列向量
B
的索引,当未指定 'legacy'
标志时以列向量的形式返回。ib
标识 B
中与 A
共有的值(或行)。如果 B
中存在重复出现的值(或行),则 ib
包含该值(或行)第一次出现位置的索引。
提示
要查找表或时间表中变量子集的交集,可以使用列下标。例如,可以使用
intersect(A(:,
,其中vars
),B(:,vars
))vars
为正整数、正整数向量、变量名称、变量名称元胞数组或逻辑向量。您也可以使用 vartype 创建一个下标,以选择指定类型的变量。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
用法说明和限制:
不支持
'legacy'
标志。当两个输入均为 tall 数组时,不支持
'stable'
标志。当两个输入均为 tall 数组时,不支持
'char'
类型的输入。不支持有序分类数组。
有关详细信息,请参阅tall 数组。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
代码生成不支持对第一个或第二个参量使用元胞数组。
如果不指定
'rows'
选项:输入
A
和B
必须为向量。如果指定'legacy'
选项,输入A
和B
必须为行向量。可变大小行向量的第一个维度必须具有固定长度 1。可变大小列向量的第二个维度必须具有固定长度 1。
不支持输入
[]
。需使用 1×0 或 0×1 输入(例如zeros(1,0)
)表示空集。如果指定
'legacy'
选项,则空输出为行向量 1×0,永远不会是 0×0。
如果同时指定
'legacy'
和'rows'
选项,则输出ia
和ib
为列向量。如果这些输出为空,则它们是 0×1,永远不会是 0×0,即使输出C
为 0×0 也是如此。当
setOrder
为'sorted'
或当您指定'legacy'
选项时,输入必须已按升序进行排序。第一个输出C
按升序排序。复数输入必须为
single
或double
。如果一个输入为复数,另一个输入为实数,请执行以下操作之一:
将
setOrder
设置为'stable'
。按复数升序(按绝对值)对实数输入进行排序。假设实数输入为
x
。使用sort(complex(x))
或sortrows(complex(x))
。
请参阅具有零值虚部的复数数据的代码生成 (MATLAB Coder)。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
用法说明和限制:
不支持
'legacy'
标志。不支持 64 位整数。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
不支持
'legacy'
标志。不支持表、时间表、分类、日期时间和持续时间输入。
当
A
或B
是字符向量元胞数组时,类型为char
和string
的输入不受支持。改为将字符向量输入参量的元胞数组转换为字符串数组。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
另请参阅
unique | union | ismember | issorted | setdiff | setxor | sort
主题
- 合并分类数组
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