?的交集 - MATLAB intersect MathWorks 中国 (2024)

本页翻译不是最新的。点击此处可查看最新英文版本。

设置两个数组的交集

全页折叠

语法

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) 返回 AB 的共有数据,但是不包含重复项。C 已排序。

  • 如果 AB 是表或时间表,intersect 将返回这两个表的共有行集。对于时间表,intersect 在确定相等性时会考虑行时间,并按行时间对输出时间表 C 进行排序。

示例

C = intersect(A,B,setOrder) 以特定顺序返回 CsetOrder 可以是 'sorted''stable'

C = intersect(A,B,___,'rows')C = intersect(A,B,'rows',___)AB 的每一行都视为单个实体,并返回 AB 的共有行,但是不包含重复项。必须指定 ABsetOrder 是可选的。

'rows' 选项不支持元胞数组,除非其中一个输入项为分类数组或日期时间数组。

示例

[C,ia,ib] = intersect(___) 支持任何上述语法,且可返回索引向量 iaib

  • 一般情况下,C = A(ia)C = B(ib)

  • 如果指定了 'rows' 选项,则 C = A(ia,:)C = B(ib,:)

  • 如果 AB 是表或时间表,则 C = A(ia,:)C = B(ib,:)

示例

[C,ia,ib] = intersect(A,B,'legacy')[C,ia,ib] = intersect(A,B,'rows','legacy') 保留 R2012b 和早期版本中 intersect 函数的行为。

'legacy' 选项不支持分类数组、日期时间数组、持续时间数组、表或时间表。

示例

全部折叠

两个向量的交集

打开实时脚本

创建两个具有某些相同值的向量。

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

查找 AB 的共有值。

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

查找 AB 的共有行。

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];

查找 AB 以及索引向量 iaib 的共有值,使得 C = A(ia) 并且 C = B(ib)

[C,ia,ib] = intersect(A,B)
C = 1×2 4 7
ia = 2×1 5 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 

查找 AB 以及索引向量 iaib 的共有行,使得 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];

查找 AB 以及索引向量 iaib 的共有行,使得 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

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 = 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];

查找 AB 的共有值。

C = intersect(A,B)
C = 5

intersectNaN 值视为不同的值。

带有尾随空白的字符向量元胞数组

打开实时脚本

创建字符向量元胞数组 A

创建字符向量元胞数组 B,其中某些向量带有尾随空白。

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

找出 AB 的共有字符向量。

[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'

查找 AB 的共有值。

[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

intersectB 解释为字符数组并返回字符数组 C

class(C)
ans = 'char'

字符和字符向量元胞数组的交集

打开实时脚本

创建包含三个字母的动物名称的字符向量。

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

创建包含不同长度的动物名称的字符向量元胞数组。

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

找出 AB 的共有字符向量。

C = intersect(A,B)
C = 2x1 cell {'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 = 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 中的值(或行)。

示例

C = intersect([7 0 1 5],[0 2 7 5],'sorted')
C = 0 5 7
'stable'

C 中的值(或行)按与 A 中所显示相同的顺序返回。

示例

C = intersect([7 0 1 5],[0 2 7 5],'stable')
C = 7 0 5

数据类型: char | string

输出参量

全部折叠

CAB 的共有数据
向量 | 矩阵 | 表 | 时间表

AB 的共有数据,以向量、矩阵或表的形式返回。如果输入 AB 是表或时间表,则 C 中的变量顺序与 A 中的变量顺序相同。

下面介绍了当输入为向量或矩阵并且未指定 'legacy' 标志时 C 的形状:

  • 如果未指定 'rows' 标志,则 C 为列向量,除非 AB 都是行向量,在这种情况下,C 为行向量。

  • 如果指定了 'rows' 标志,则 C 是一个包含 AB 共用的行的矩阵。

输入 AB 的类确定 C 的类:

  • 如果 AB 的类相同,则 C 为相同类。

  • 如果将 char 或非双精度数值类与 double 合并,则 C 是与非双精度输入相同的类。

  • 如果将 logical 类与 double 合并,则 Cdouble

  • 如果将字符向量元胞数组与 char 合并,则 C 是字符向量元胞数组。

  • 如果将分类数组与字符向量、字符向量元胞数组或字符串合并,则 C 是分类数组。

  • 如果将日期时间数组与日期字符向量元胞数组或单个日期字符向量合并,则 C 是日期时间数组。

  • 如果将字符串数组与字符向量或字符向量元胞数组合并,则 C 是字符串数组。

iaA 的索引
列向量

A 的索引,当未指定 'legacy' 标志时以列向量的形式返回。ia 标识 A 中与 B 共有的值(或行)。如果 A 中存在重复出现的值(或行),则 ia 包含该值(或行)第一次出现位置的索引。

ibB 的索引
列向量

B 的索引,当未指定 'legacy' 标志时以列向量的形式返回。ib 标识 B 中与 A 共有的值(或行)。如果 B 中存在重复出现的值(或行),则 ib 包含该值(或行)第一次出现位置的索引。

提示

  • 要查找表或时间表中变量子集的交集,可以使用列下标。例如,可以使用 intersect(A(:,vars),B(:,vars)),其中 vars 为正整数、正整数向量、变量名称、变量名称元胞数组或逻辑向量。您也可以使用 vartype 创建一个下标,以选择指定类型的变量。

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2006a 之前推出

另请参阅

unique | union | ismember | issorted | setdiff | setxor | sort

主题

  • 合并分类数组

MATLAB 命令

您点击的链接对应于以下 MATLAB 命令:

 

请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。

„的交集 - MATLAB intersect MathWorks 中国 (1)

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

Europe

Asia Pacific

Contact your local office

?的交集 - MATLAB intersect MathWorks 中国 (2024)

References

Top Articles
Latest Posts
Article information

Author: Greg O'Connell

Last Updated:

Views: 5680

Rating: 4.1 / 5 (42 voted)

Reviews: 89% of readers found this page helpful

Author information

Name: Greg O'Connell

Birthday: 1992-01-10

Address: Suite 517 2436 Jefferey Pass, Shanitaside, UT 27519

Phone: +2614651609714

Job: Education Developer

Hobby: Cooking, Gambling, Pottery, Shooting, Baseball, Singing, Snowboarding

Introduction: My name is Greg O'Connell, I am a delightful, colorful, talented, kind, lively, modern, tender person who loves writing and wants to share my knowledge and understanding with you.