【问题标题】:comparing strings in two tables matlab比较两个表中的字符串matlab
【发布时间】:2017-08-09 15:55:35
【问题描述】:

我知道 matlab 可以方便地从表中获取所有行,这些行在 'a' 列中有字符串(在这种情况下)desired_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.

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

【问题讨论】:

    标签: matlab string-comparison strcmp


    【解决方案1】:

    您可以使用ismember 输入字符串元胞数组,它会输出一个logical 向量,告诉您字符串元胞数组中的哪些元素出现在源数组中。

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

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

    现在假设我要查找姓氏为 Jenkins 和 Griffin 的患者。因此:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-08
      • 2019-04-07
      • 2019-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多