比较matlab两个表中的字符串

时间:2017-08-09 15:55:35

标签: matlab string-comparison strcmp

我知道matlab可以方便地从表格中获取所有行,这些行具有字符串(在本例中),在' a'列如此:

refs_found = refs(strcmp(refs.a,desired_a),:);

但是,我希望在desired_a不是字符串,而是带有字符串的向量的情况下执行此操作,并使用refs_found返回refs.a中的字符串也在desired_a中的所有行。

当我尝试这样做时,我不出所料: Error using strcmp Inputs must be the same size or either one can be a scalar.

有没有办法在不迭代每一行的情况下做到这一点?

1 个答案:

答案 0 :(得分:2)

您可以使用ismember输入字符串的单元格数组,并输出logical向量,告诉您字符串单元格数组中的哪些元素出现在源数组中

使用MATLAB内置的示例,让我们创建一个表:

load patients
refs = table(LastName,Gender,Age,Height,Weight,Smoker,Systolic,Diastolic)

现在让我们说我想找到姓詹妮斯和格里芬的病人。因此:

desired_a = {'Griffin', 'Jenkins'};
refs_found = refs(ismember(refs.LastName, desired_a), :);

您可以使用ismember访问表的行,调用ismember,使第一个参数是您在表中引用的列,第二个参数是您想要的字符串搜索。

我们终于得到了:

>> refs_found = refs(ismember(refs.LastName, desired_a), :)

refs_found = 

    LastName     Gender    Age    Height    Weight    Smoker    Systolic    Diastolic
    _________    ______    ___    ______    ______    ______    ________    _________

    'Jenkins'    'Male'    28     69        189       true      134         82       
    'Griffin'    'Male'    49     70        186       false     119         74  

通常,首先创建要搜索的字符串的单元格数组:

desired_a = {'string_1', 'string_2', ...};

之后,使用它来索引你的表格以获得你需要的东西:

refs_found = refs(ismember(refs.a, desired_a), :); 
相关问题