union
两个数据集的并集
语法
说明
示例
定义都包含某些行的两个表。
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
计算表 A 和 B 的并集。
C = union(A,B)
C=7×3 table
Var1 Var2 Var3
____ ____ _____
1 "A" false
2 "B" true
3 "C" false
4 "D" true
5 "E" false
7 "G" false
9 "I" false
定义都包含某个值的两个向量。
A = [5 7 1]; B = [3 1 1];
计算向量 A 和 B 以及索引向量 ia 和 ib 的并集。
[C,ia,ib] = union(A,B)
C = 1×4
1 3 5 7
ia = 3×1
3
1
2
ib = 1
C 中的值是 A(ia) 和 B(ib) 的合并值。
定义表 A,其中包含三个人是否为吸烟者、其年龄和身高信息。
A = table([true;true;false],[27;52;31],[74;68;64], ... VariableNames=["Smoker" "Age" "Height"], ... RowNames=["Sanchez" "Brown" "Wu"])
A=3×3 table
Smoker Age Height
______ ___ ______
Sanchez true 27 74
Brown true 52 68
Wu false 31 64
定义表 B,所含变量与 A 相同。
B = table([false;true],[64;68],[31;47], ... VariableNames=["Smoker" "Height" "Age"], ... RowNames=["Smith" "Cheng"])
B=2×3 table
Smoker Height Age
______ ______ ___
Smith false 64 31
Cheng true 68 47
计算表 A 和 B 以及索引向量 ia 和 ib 的并集。具有相同值但不同行名称的两个行被视为相等。因此,Wu、A(3,:)、Smith 和 B(1,:) 是相等的。输出表 C 包含来自第一个输入表的行,并且 ia 包含来自 A 的行索引。向量 ib 不包含标签为 Smith 的行的行索引。
[C,ia,ib] = union(A,B)
C=4×3 table
Smoker Age Height
______ ___ ______
Wu false 31 64
Sanchez true 27 74
Cheng true 47 68
Brown true 52 68
ia = 3×1
3
1
2
ib = 2
定义都包含某行的两个矩阵。
A = [2 2 2; 0 0 1]; B = [1 2 3; 2 2 2; 2 2 2];
计算没有重复项的 A 和 B 的合并行,以及索引向量 ia 和 ib 的合并行。
[C,ia,ib] = union(A,B,'rows')C = 3×3
0 0 1
1 2 3
2 2 2
ia = 2×1
2
1
ib = 1
C 的行是 A(ia,:) 和 B(ib,:) 的合并行。
使用 setOrder 参量指定 C 中值的排序方式。
如果您想要 C 中的值与 A 和 B 中的值顺序相同,请指定 'stable'。
A = [5 7 1];
B = [3 1 1];
[C,ia,ib] = union(A,B,'stable')C = 1×4
5 7 1 3
ia = 3×1
1
2
3
ib = 1
此外,还可以指定 'sorted' 顺序。
A = [5 7 1];
B = [3 1 1];
[C,ia,ib] = union(A,B,'sorted')C = 1×4
1 3 5 7
ia = 3×1
3
1
2
ib = 1
定义两个包含 NaN 的向量。
A = [5 NaN 1]; B = [4 NaN NaN];
计算向量 A 和 B 的并集。
C = union(A,B)
C = 1×6
1 4 5 NaN NaN NaN
union 将 NaN 值视为不同的值。
创建字符向量元胞数组 A。
A = {'dog','cat','fish','horse'};创建字符向量元胞数组 B,其中某些向量带有尾随空白。
B = {'dog ','cat','fish ','horse'};合并 A 和 B 的元素。
[C,ia,ib] = union(A,B)
C = 1×6 cell
{'cat'} {'dog'} {'dog '} {'fish'} {'fish '} {'horse'}
ia = 4×1
2
1
3
4
ib = 2×1
1
3
union 将字符向量元胞数组中的尾随空白视为不同的字符。
创建一个列向量字符数组。
A = ['A';'B';'C']
A = 3×1 char array
'A'
'B'
'C'
class(A)
ans = 'char'
创建一个包含数值类型 double 的元素的行向量。
B = [68 69 70]
B = 1×3
68 69 70
class(B)
ans = 'double'
A 和 B 的 union 返回一个列向量字符数组。
C = union(A,B)
C = 6×1 char array
'A'
'B'
'C'
'D'
'E'
'F'
class(C)
ans = 'char'
创建一个包含字母 a、b 和 c 的字符向量。
A = ['a';'b';'c']; class(A)
ans = 'char'
创建一个包含字母 c、d 和 e 的字符向量元胞数组。
B = {'c','d','e'};
class(B)ans = 'cell'
合并 A 和 B 的元素。
C = union(A,B)
C = 5×1 cell
{'a'}
{'b'}
{'c'}
{'d'}
{'e'}
结果 C 是字符向量元胞数组。
class(C)
ans = 'cell'
在代码中使用 'legacy' 标志以保留 R2012b 和早期版本中 union 的行为。
计算 A 和 B 的并集并保留当前行为。
A = [5 7 1]; B = [3 1 1]; [C1,ia1,ib1] = union(A,B)
C1 = 1×4
1 3 5 7
ia1 = 3×1
3
1
2
ib1 = 1
计算 A 和 B 的并集并保留旧版行为。
A = [5 7 1];
B = [3 1 1];
[C2,ia2,ib2] = union(A,B,'legacy')C2 = 1×4
1 3 5 7
ia2 = 1×2
1 2
ib2 = 1×2
3 1
输入参数
输入数组。如果指定 'rows' 选项,则 A 和 B 的列数必须相同。
A 和 B 必须是相同类,以下情况例外:
logical、char和所有数值类可以与double数组合并。字符串数组可以与字符向量和字符向量元胞数组合并。
分类数组可以与字符串标量和字符向量结合使用。
日期和时间和持续时间数组可以与格式化为表示日期和时间的字符串标量和字符向量结合使用。
根据数据类型,对 A 和 B 还有其他要求:
如果
A和B均为有序分类数组,则必须具有相同的类别集(包括其顺序)。如果A和B都不是有序分类数组,则不必具有相同的类别集,因此可使用类别名称对两者进行比较。在这种情况下,C的类别中前面是A的类别,后面跟有不在A中的B的类别。类别的顺序与在A和B中的顺序相同,将使用类别顺序对C进行排序。如果
A和B是表或时间表,则必须具有相同的变量名称(顺序除外)。对于表,将忽略行名称,所以值相同而名称不同的两行将被视为相等。对于时间表,将考虑行时间,所以值相同而时间不同的两行将被视为不相等。如果
A和B是日期时间数组,则这两个数组必须或者都指定时区,或者都未设置时区。
A 和 B 还可以是具有以下类方法的对象:
sort(或'rows'选项的sortrows)ne
对象类方法彼此之间必须一致。这些对象包括从相同根类导出的异构数组。例如,A 和 B 可以是图形对象的句柄数组。
顺序标志以 'sorted' 或 'stable' 指定,指示 C 中值(或行)的顺序。
| 标志 | 描述 |
|---|---|
'sorted' | 按 示例 C = union([5 5 3],[1 2 5],'sorted')C =
1 2 3 5 |
'stable' |
示例 C = union([5 5 3],[1 2 5],'stable')C =
5 3 1 2 |
数据类型: char | string
输出参量
A 和 B 的合并数据,以向量、矩阵、表或时间表形式返回。如果输入 A 和 B 是表或时间表,则 C 中的变量顺序与 A 中的变量顺序相同。
下面介绍了当输入为向量或矩阵并且未指定 'legacy' 标志时 C 的形状:
如果未指定
'rows'标志,则C为列向量,除非A和B都是行向量,在这种情况下,C为行向量。例如,union([],[1 2])返回一个列向量。如果指定了
'rows'标志,则C是一个包含A和B的合并行的矩阵。
输入 A 和 B 的类确定 C 的类:
如果
A和B的类相同,则C为相同类。如果将
char或非双精度数值类与double合并,则C是与非双精度输入相同的类。如果将
logical类与double合并,则C是double。如果将字符向量元胞数组与
char合并,则C是字符向量元胞数组。如果将分类数组与字符向量、字符向量元胞数组或字符串合并,则
C是分类数组。如果将日期时间数组与日期字符向量元胞数组或单个日期字符向量合并,则
C是日期时间数组。如果将字符串数组与字符向量或字符向量元胞数组合并,则
C是字符串数组。
A 的索引,当未指定 'legacy' 标志时以列向量的形式返回。ia 指示 A 中合入并集中的值(或行)。如果某个值(或行)在 A 中出现多次,则 ia 将包含值(或行)第一次出现位置的索引。如果某个值同时出现在 A 和 B 中,则 ia 包含 A 中第一次出现位置的索引。
B 的索引,当未指定 'legacy' 标志时以列向量的形式返回。ib 指示 B 中合入并集中的值(或行)。如果有仅在 B 中重复出现的值(或行),则 ib 包含该值第一次出现位置的索引。如果某个值(或行)同时出现在 A 和 B 中,则 ib 不包含该值(或行)的索引。
提示
要计算与一个表或时间表的变量子集相关的并集,可以使用列下标。例如,可以使用
union(A(:,,其中vars),B(:,vars))vars为正整数、正整数向量、变量名称、变量名称元胞数组或逻辑向量。您也可以使用vartype创建一个下标,以选择指定类型的变量。
扩展功能
union 函数支持 tall 数组,但存在以下使用说明和限制:
不支持
'stable'排序顺序。不支持
'legacy'标志。不支持
char类型的输入。不支持有序分类数组。
有关详细信息,请参阅tall 数组。
用法说明和限制:
代码生成不支持对第一个或第二个参量使用元胞数组。
代码生成不支持在可变大小的行和列之间使用
union。A和B必须为具有相同方向的可变大小向量输入。如果不指定
'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不是'stable'或当您指定'legacy'选项时,输入必须已按升序进行排序。第一个输出C按升序排序。复数输入必须为
single或double。如果一个输入为复数,另一个输入为实数,请执行以下操作之一:
将
setOrder设置为'stable'。按复数升序(按绝对值)对实数输入进行排序。假设实数输入为
x。使用sort(complex(x))或sortrows(complex(x))。
请参阅具有零值虚部的复数数据的代码生成 (MATLAB Coder)。
请参阅“C/C++ 代码生成”部分中的用法说明和限制。同样的用法说明和限制也适用于 GPU 代码生成。
基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。
union 函数支持 GPU 数组输入,但有以下用法说明和限制:
不支持
'legacy'标志。不支持 64 位整数。
有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
union 函数支持分布式数组输入,但有以下用法说明和限制:
不支持
'legacy'标志。不支持表、时间表、分类、日期时间和持续时间输入。
当
A或B是字符向量元胞数组时,类型为char和string的输入不受支持。改为将字符向量输入参量的元胞数组转换为字符串数组。
有关详细信息,请参阅使用分布式数组运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2006a 之前推出
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.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- 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)