如何使用MATLAB返回包含list1和list2中元素的列表

时间:2016-07-16 22:01:59

标签: arrays matlab search comparison

我想在MATLAB中比较list1list2并获取第三个列表list3,其中包含来自list1的所有元素,这些元素也在{{1}中}(包括list2中的重复条目)。

例如,list1包含元素

list1

AA,AB,AC,AC,AC,CB 以下内容:

list2

因此,BA,BB,AC,BN,MN,CB,CB 应包含

list3

由于在AC,AC,AC,CB 中可以找到AC三次,因此在list1中也可以代表三次。 list3CB两次,list2只有一次,因此list1只能显示一次。

我怎样才能在MATLAB中做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用ismember

  

tf = ismember(A, S)返回与A大小相同的数组,其中包含逻辑1true),其中A的元素位于集S中其他地方有1}}和逻辑0false)。在集理论术语中,k1,其中AS。输入AS可以是数字或字符数组或字符串的单元格数组。

如果您将list1list2定义为单元格数组,它将变为如下所示:

list1 = {'AA', 'AB', 'AC', 'AC', 'AC', 'CB'}
list2 = {'BA', 'BB', 'AC', 'BN', 'MN', 'CB', 'CB'}
I = ismember(list1, list2) % positions where the elements of list1 are in the set list2
list3 = list1(ismember(list1, list2))

它将返回:

I =     0     0     1     1     1     1
list3 = 'AC'    'AC'    'AC'    'CB'

您还可以将列表(集)定义为矩阵(如果集合中的所有元素具有相同的长度)。在这种情况下,您需要将另一个参数传递给ismember

  

tf = ismember(A, S, 'rows'),当AS是具有相同列数的矩阵时,会返回包含1的向量,其中A的行也是否则,S0行。如果AS是字符串的单元格数组,则无法使用此语法。

list1 = ['AA'; 'AB'; 'AC'; 'AC'; 'AC'; 'CB']
list2 = ['BA'; 'BB'; 'AC'; 'BN'; 'MN'; 'CB'; 'CB']
I = ismember(list1, list2, 'rows')
list3 = list1(ismember(list1, list2, 'rows'), :)

返回:

I =
0
0
1
1
1
1


list3 =
AC
AC
AC
CB