Matlab 比较两个表中的字符串

Matlab 比较两个表中的字符串,matlab,string-comparison,strcmp,Matlab,String Comparison,Strcmp,我知道matlab可以方便地从表中获取所有行,这些行在“a”列中具有所需的字符串(在本例中),如下所示: refs_found = refs(strcmp(refs.a,desired_a),:); 但是,我希望在以下情况下执行此操作:所需的_a不是字符串,而是带有字符串的向量,并且找到的refs_返回refs.a中的字符串也在所需的_a中的所有行 当我尝试这样做时,我毫不奇怪地得到: 使用strcmp时出错 输入的大小必须相同,或者其中一个可以是标量。 有没有一种方法可以在不遍历每一行的情况

我知道matlab可以方便地从表中获取所有行,这些行在“a”列中具有所需的字符串(在本例中),如下所示:

refs_found = refs(strcmp(refs.a,desired_a),:);
但是,我希望在以下情况下执行此操作:所需的_a不是字符串,而是带有字符串的向量,并且找到的refs_返回refs.a中的字符串也在所需的_a中的所有行

当我尝试这样做时,我毫不奇怪地得到:
使用strcmp时出错
输入的大小必须相同,或者其中一个可以是标量。

有没有一种方法可以在不遍历每一行的情况下执行此操作?

您可以使用where输入字符串单元格数组,它将输出一个
逻辑
向量,告诉您字符串单元格数组中的哪些元素出现在源数组中

使用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), :);