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]',['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
中。
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(['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(['M';'F';'F';'F'],[47;31;35;23],[68;64;62;58],... 'VariableNames',{'Gender' 'Age' 'Height'},... 'RowNames',{'Joe' 'Meg' 'Beth' 'Amy'})
B=4×3 table
Gender Age Height
______ ___ ______
Joe M 47 68
Meg F 31 64
Beth F 35 62
Amy F 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
值相同而名称不同的两行将被视为相等。Betty
的数据同样也在 B(2,:)
中找到,与 Meg
对应。
判断查询行是否在另一个行集中
创建都包含某行的两个矩阵。
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
将字符向量元胞数组中的尾随空白视为不同的字符。
字符和字符向量元胞数组的成员
创建字符向量 A
和字符向量元胞数组 B
。
A = ['cat';'dog';'fox';'pig']; B = {'dog','cat','fish','horse'};
确定 A
的哪些字符向量同时也在 B
中。
[Lia,Locb] = ismember(A,B)
Lia = 4x1 logical array
1
1
0
0
Locb = 4×1
2
1
0
0
保留 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
均为有序分类数组,则必须具有相同的类别集(包括其顺序)。如果A
和B
都不是有序分类数组,则不必具有相同的类别集,因此可使用类别名称对两者进行比较。如果
A
是表或时间表,则必须具有与B
相同的变量名称(顺序除外)。对于表,将忽略行名称,所以值相同而名称不同的两行将被视为相等。对于时间表,将考虑行时间,所以值相同而时间不同的两行将被视为不相等。如果
A
和B
是日期时间数组,则它们在是否指定时区方面彼此之间必须一致。
对于文本输入,ismember
通常不会忽略字符向量、字符向量元胞数组和字符串数组中的尾随空格。但是,某些情况下,ismember
会忽略尾随空格:
如果
A
是字符数组,而B
是字符向量元胞数组,则ismember
将忽略字符数组中的尾随空格。如果指定了
'rows'
选项,则ismember
将忽略字符向量和字符数组中的尾随空格。
A
还可以是具有以下类方法的对象:
sort
(或'rows'
选项的sortrows
)eq
ne
对象类方法彼此之间必须一致。这些对象包括从相同根类导出的异构数组。例如,A
可以是图形对象的句柄的数组。
B
— 集数组
数值数组 | 逻辑数组 | 字符数组 | 字符串数组 | 分类数组 | 日期时间数组 | 持续时间数组 | 字符向量元胞数组 | 表 | 时间表
集数组,指定为数值数组、逻辑数组、字符数组、字符串数组、分类数组、日期时间数组、持续时间数组、字符向量元胞数组、表或时间表。如果指定 'rows'
选项,则 A
和 B
的列数必须相同。
B
和 A
必须是相同类,以下情况例外:
logical
、char
和所有数值类可以与double
数组合并。字符向量元胞数组可与字符数组或字符串数组合并。
分类数组可与字符数组、字符向量元胞数组或字符串数组合并。
日期时间数组可与日期字符向量元胞数组或单个日期字符向量合并。
根据数据类型,对 A
和 B
还有其他要求:
如果
A
和B
均为有序分类数组,则必须具有相同的类别集(包括其顺序)。如果A
和B
都不是有序分类数组,则不必具有相同的类别集,因此可使用类别名称对两者进行比较。如果
B
是表或时间表,则必须具有与A
相同的变量名称(顺序除外)。对于表,将忽略行名称,所以值相同而名称不同的两行将被视为相等。对于时间表,将考虑行时间,所以值相同而时间不同的两行将被视为不相等。如果
A
和B
是日期时间数组,则它们在是否指定时区方面彼此之间必须一致。
对于文本输入,ismember
通常不会忽略字符向量、字符向量元胞数组和字符串数组中的尾随空格。但是,某些情况下,ismember
会忽略尾随空格:
如果
A
是字符数组,而B
是字符向量元胞数组,则ismember
将忽略字符数组中的尾随空格。如果指定了
'rows'
选项,则ismember
将忽略字符向量和字符数组中的尾随空格。
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) 上运行来加快代码执行。
用法说明和限制:
不支持
'legacy'
标志。不支持 64 位整数。
有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。
分布式数组
使用 Parallel Computing Toolbox™ 在集群的组合内存中对大型数组进行分区。
用法说明和限制:
不支持
'legacy'
标志。
有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (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)