MATLAB中intersect函数用法
目录
语法
说明
示例
两个向量的交集
两个表的交集
两个向量及其索引的交集
两个表及其索引的交集
两个矩阵中的行的交集
具有指定输出顺序的交集
包含 NaN 的向量的交集
带有尾随空白的字符向量元胞数组
具有不同类和形状的数组的交集
字符和字符向量元胞数组的交集
保留 intersect 的旧版行为
intersect函数的功能是设置两个数组的交集。
语法
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') 和 [C,ia,ib] = intersect(A,B,'rows','legacy') 保留 R2012b 和早期版本中 intersect 函数的行为。
'legacy' 选项不支持分类数组、日期时间数组、持续时间数组、表或时间表。
示例
两个向量的交集
创建两个具有某些相同值的向量。
A = [7 1 7 7 4];
B = [7 0 4 4 0];
查找 A 和 B 的共有值。
C = intersect(A,B)
C = 1×24 7
两个表的交集
创建都包含某些行的两个表。
A = table([1:5]',categorical({'A';'B';'C';'D';'E'}),logical([0;1;0;1;0]))
A=5×3 tableVar1 Var2 Var3 ____ ____ _____1 A false2 B true 3 C false4 D true 5 E falseB = table([1:2:10]',categorical({'A';'C';'E';'G';'I'}),logical(zeros(5,1)))
B=5×3 tableVar1 Var2 Var3 ____ ____ _____1 A false3 C false5 E false7 G false9 I false
查找 A 和 B 的共有行。
C = intersect(A,B)
C=3×3 tableVar1 Var2 Var3 ____ ____ _____1 A false3 C false5 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×24 7ia = 2×151ib = 2×131
两个表及其索引的交集
创建表 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 tableGender 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 tableGender 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 tableGender 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×31 2 32 2 2ia = 2×131ib = 2×112
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×27 4ia = 2×115ib = 2×113
此外,还可以指定 'sorted' 顺序。
[C,ia,ib] = intersect(A,B,'sorted')
C = 1×24 7ia = 2×151ib = 2×131
包含 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×124ib = 2×124
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×365 66 6768 69 70ans =
'double'
查找 A 和 B 的共有值。
[C,ia,ib] = intersect(A,B)
C = 3x1 char array'A''B''C'ia = 3×1123ib = 3×1135
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×24 7ia1 = 2×151ib1 = 2×131
查找 A 的唯一元素并保留旧版行为。
[C2,ia2,ib2] = intersect(A,B,'legacy')
C2 = 1×24 7ia2 = 1×25 4ib2 = 1×24 1
提示
-
要查找表或时间表中变量子集的交集,可以使用列下标。例如,可以使用 intersect(A(:,vars),B(:,vars)),其中 vars 为正整数、正整数向量、变量名称、变量名称元胞数组或逻辑向量。也可以使用 vartype 创建一个下标,以选择指定类型的变量。