ismember
判断数组元素是否为集合数组成员
语法
说明
示例
判断查询值是否为集成员
创建都包含某些值的两个向量。
A = [5 3 4 2]; B = [2 4 4 4 6 8];
确定 A
的哪些元素同时也在 B
中。
Lia = ismember(A,B)
Lia = 1x4 logical array
0 0 1 1
A(3)
和 A(4)
可以在 B
中找到。
判断两个表的共有表行
创建都包含某些行的两个表。
A = table([1:5]',["red";"green";"blue";"cyan";"magenta"],logical([0;1;0;1;0]))
A=5×3 table
Var1 Var2 Var3
____ _________ _____
1 "red" false
2 "green" true
3 "blue" false
4 "cyan" true
5 "magenta" false
B = table([1:2:10]',["red";"blue";"magenta";"yellow";"black"],logical(zeros(5,1)))
B=5×3 table
Var1 Var2 Var3
____ _________ _____
1 "red" false
3 "blue" false
5 "magenta" false
7 "yellow" false
9 "black" false
确定 A
中的哪些行同时也存在于 B
中。
Lia = ismember(A,B)
Lia = 5x1 logical array
1
0
1
0
1
行 A(1,:)
、A(3,:)
和 A(5,:)
位于 B
中。
判断查询值是否为集成员并确定共有值的索引
创建都包含某些值的两个向量。
A = [5 3 4 2]; B = [2 4 4 4 6 8];
确定 A
的哪些元素同时也在 B
中及其在 B
中的相应位置。
[Lia,Locb] = ismember(A,B)
Lia = 1x4 logical array
0 0 1 1
Locb = 1×4
0 0 2 1
A(3)
的最小索引为 B(2)
,A(4)
可以在 B(1)
中找到。
存在数值误差的集合成员
创建向量 x
。通过变换和取消变换 x
来获取第二个向量 y
。此变换会向 y
中引入舍入误差。
x = (1:6)'*pi; y = 10.^log10(x);
通过取差值来验证 x
和 y
不同。
x-y
ans = 6×1
10-14 ×
0.0444
0
0
0
0
-0.3553
使用 ismember
以查找 x
内位于 y
中的元素。ismember
函数执行精确比较并确定 x
中的某些矩阵元素不是 y
的成员。
lia = ismember(x,y)
lia = 6x1 logical array
0
1
1
1
1
0
使用 ismembertol
执行使用较小容差的比较。ismembertol
将容差范围内的元素视为相等元素并确定 x
中的所有元素都为 y
的成员。
LIA = ismembertol(x,y)
LIA = 6x1 logical array
1
1
1
1
1
1
判断查询行是否在另一个表中并确定共有行在该表中的位置
创建表 A
,其中包含五个人是否为吸烟者、其年龄和身高信息。
A = table([true;true;false;true;false],[27;52;31;46;35],[74;68;64;61;64],... VariableNames=["Smoker" "Age" "Height"],... RowNames=["Sanchez" "Johnson" "Li" "Diaz" "Brown"])
A=5×3 table
Smoker Age Height
______ ___ ______
Sanchez true 27 74
Johnson true 52 68
Li false 31 64
Diaz true 46 61
Brown false 35 64
创建另一个与 A
具有共有行的表 B
。
B = table([false;false;false;false],[47;31;35;23],[68;64;62;58],... VariableNames=["Smoker" "Age" "Height"],... RowNames=["Nguyen" "Cohen" "Jones" "Garcia"])
B=4×3 table
Smoker Age Height
______ ___ ______
Nguyen false 47 68
Cohen false 31 64
Jones false 35 62
Garcia false 23 58
确定 A
的哪些行同时也在 B
中及其在 B
中的相应位置。
[Lia,Locb] = ismember(A,B)
Lia = 5x1 logical array
0
0
1
0
0
Locb = 5×1
0
0
2
0
0
具有相同值但不同行名称的两个表行被视为相等。Li
的数据同样也在 B(2,:)
中找到,与 Cohen
对应。
判断查询行是否在另一个行集中
创建都包含某行的两个矩阵。
A = [1 3 5 6; 2 4 6 8]; B = [2 4 6 8; 1 3 5 7; 2 4 6 8];
确定 A
的哪些行同时也在 B
中及其在 B
中的相应位置。
[Lia, Locb] = ismember(A,B,"rows")
Lia = 2x1 logical array
0
1
Locb = 2×1
0
1
A(2,:)
的最小索引是 B(1,:)
。
包含 NaN 值的集成员
创建两个包含 NaN
的向量。
A = [5 NaN NaN]; B = [5 NaN NaN];
确定 A
的哪些元素同时也在 B
中及其在 B
中的相应位置。
[Lia,Locb] = ismember(A,B)
Lia = 1x3 logical array
1 0 0
Locb = 1×3
1 0 0
ismember
将 NaN
值视为不同的值。
带有尾随空白的字符串
创建一个字符串数组 A
。
A = ["dog","cat","fish","horse"];
创建另一个字符串数组 B
,其中一些元素带有尾随空白。
B = ["dog ","cat","fish ","horse"];
确定 A
中的哪些字符串也在 B
中。
[Lia,Locb] = ismember(A,B)
Lia = 1x4 logical array
0 1 0 1
Locb = 1×4
0 2 0 4
ismember
将字符串数组以及字符向量元胞数组中的尾随空白视为不同的字符。
保留 ismember 的旧版行为
在代码中使用 "legacy"
标志以保留 R2012b 和早期版本中 ismember
的行为。
使用当前行为查找 B
的成员。
A = [5 3 4 2]; B = [2 4 4 4 6 8]; [Lia1,Locb1] = ismember(A,B)
Lia1 = 1x4 logical array
0 0 1 1
Locb1 = 1×4
0 0 2 1
查找 B
的成员并保留旧版行为。
[Lia2,Locb2] = ismember(A,B,"legacy")
Lia2 = 1x4 logical array
0 0 1 1
Locb2 = 1×4
0 0 4 1
输入参数
A
— 查询数组
数组 | 表 | 时间表
查询数组,指定为数组、表或时间表。如果指定 "rows"
选项,则 A
和 B
的列数必须相同。
A
和 B
必须是相同类,以下情况例外:
logical
、char
和所有数值类可以与double
数组合并。字符串数组可以与字符向量元胞数组合并。
分类数组可以与字符串标量和字符向量结合使用。
日期时间数组可以与格式化为表示日期和时间的字符串数组、字符串标量和字符向量结合使用。
根据数据类型,对 A
和 B
还有其他要求:
如果
A
是分类数组,则B
可以是分类数组,也可以是字符串数组。在这种情况下,第二个输入B
是一组类别名称。如果
A
和B
均为有序分类数组,则必须具有相同的类别集(包括其顺序)。如果
A
和B
都不是有序分类数组,则不必具有相同的类别集,因此可使用类别名称对两者进行比较。如果
A
是表或时间表,则必须具有与B
相同的变量名称(顺序除外)。对于表,将忽略行名称,所以值相同而名称不同的两行将被视为相等。
对于时间表,将考虑行时间,所以值相同而时间不同的两行将被视为不相等。
如果
A
和B
是日期时间数组,则它们或者都必须指定时区,或者都必须未设置时区。
A
还可以是具有以下类方法的对象:
sort
(或"rows"
选项的sortrows
)eq
ne
对象类方法彼此之间必须一致。这些对象包括从相同根类导出的异构数组。例如,A
可以是图形对象的句柄的数组。
B
— 集合数组
数组 | 表 | 时间表
集合数组,指定为数组、表或时间表。如果指定 "rows"
选项,则 A
和 B
的列数必须相同。
B
和 A
必须是相同类,以下情况例外:
logical
、char
和所有数值类可以与double
数组合并。字符串数组可以与字符向量元胞数组合并。
分类数组可以与字符串标量和字符向量结合使用。
日期时间数组可以与格式化为表示日期和时间的字符串数组、字符串标量或字符向量结合使用。
根据数据类型,对 A
和 B
还有其他要求:
如果
A
是分类数组,则B
可以是分类数组,也可以是字符串数组。在这种情况下,第二个输入B
是一组类别名称。如果
A
和B
均为有序分类数组,则必须具有相同的类别集(包括其顺序)。如果
A
和B
都不是有序分类数组,则不必具有相同的类别集,因此可使用类别名称对两者进行比较。如果
A
是表或时间表,则必须具有与B
相同的变量名称(顺序除外)。对于表,将忽略行名称,所以值相同而名称不同的两行将被视为相等。
对于时间表,将考虑行时间,所以值相同而时间不同的两行将被视为不相等。
如果
A
和B
是日期时间数组,则它们或者都必须指定时区,或者都必须未设置时区。
B
还可以是具有以下类方法的对象:
sort
(或"rows"
选项的sortrows
)eq
ne
对象类方法彼此之间必须一致。这些对象包括从相同根类导出的异构数组。例如,B
可以是图形对象的句柄的数组。
输出参量
Lia
— A
的逻辑索引
向量 | 矩阵 | N 维数组
A
的逻辑索引,如果 A
中的某些值(或行)是 B
的成员,则返回在相应位置包含逻辑值 1
(true
) 的向量、矩阵或 N 维数组。其他位置则包含逻辑值 0
(false
)。
Lia
是大小与 A
相同的数组,除非您指定 "rows"
标志。
如果指定了 "rows"
标志,或者 A
是表或时间表,Lia
则为一个列向量,且其行数与 A
的行数相同。
Locb
— B
中的位置
向量 | 矩阵 | N 维数组
B
中的位置,返回为向量、矩阵或 N 维数组。如果未指定 "legacy"
标志,对于 A
中属于 B
的成员的值,Locb
会包含这些值(即行)在 B 中的最小索引。值为 0
表示 A
不是 B
的成员。
Locb
是大小与 A
相同的数组,除非您指定 "rows"
标志。
如果指定了 "rows"
标志,或者 A
是表或时间表,Locb
则为一个列向量,且其行数与 A
的行数相同。
提示
使用
ismembertol
,可以利用容差进行浮点数之间的比较。要查找表或时间表
A
与B
中共有的有关变量子集的行,可以使用列下标。例如,可以使用ismember(A(:,
,其中vars
),B(:,vars
))vars
为正整数、正整数向量、变量名称、由变量名称组成的字符串数组或元胞数组,或者逻辑向量。您也可以使用vartype
创建一个下标,以选择指定类型的变量。
扩展功能
tall 数组
对行数太多而无法放入内存的数组进行计算。
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
基于线程的环境
使用 MATLAB® backgroundPool
在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool
加快代码运行速度。
此函数完全支持基于线程的环境。有关详细信息,请参阅在基于线程的环境中运行 MATLAB 函数。
GPU 数组
通过使用 Parallel Computing Toolbox™ 在图形处理单元 (GPU) 上运行来加快代码执行。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
版本历史记录
在 R2006a 之前推出
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
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:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
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
- United Kingdom (English)