【问题标题】:How to return a list containing the elements which are in both list1 and list2 using MATLAB如何使用MATLAB返回包含list1和list2中元素的列表
【发布时间】:2016-11-19 20:11:23
【问题描述】:

我试图在 MATLAB 中比较 list1list2 并获得第三个列表 list3,其中包含来自 list1 的所有元素,这些元素也在 list2 中(包括 list1 中的重复条目) .

例如,list1 包含元素

AA,AB,AC,AC,AC,CB 

还有list2以下的:

BA,BB,AC,BN,MN,CB,CB

因此,list3 应该包含

AC,AC,AC,CB

由于AC 可以在list1 中找到3 次,它也必须在list3 中表示3 次。 CBlist2 中出现两次,但在list1 中只出现一次,因此在list3 中应该只显示一次。

如何在 MATLAB 中做到这一点?

【问题讨论】:

  • 试试list1(ismember(list1, list2))
  • @saastn 把它写下来作为答案!

标签: arrays matlab search comparison


【解决方案1】:

您可以为此使用ismember

tf = ismember(A, S) 返回一个与A 相同大小的数组,包含逻辑1 (true),其中A 的元素在集合S 中,逻辑0 (@987654330 @) 其他地方。在集合论术语中,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

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2020-01-09
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    相关资源
    最近更新 更多