我知道 matlab 可以方便地从表中获取“a”列中包含字符串(在本例中)desired_a 的所有行,如下所示:
refs_found = refs(strcmp(refs.a,desired_a),:);
但是,我想在desired_a不是字符串而是带有字符串的向量的情况下执行此操作,并且refs_found返回refs.a中的字符串也在desired_a中的所有行。
当我尝试这样做时,我毫不奇怪地得到:
使用 strcmp 时出错
输入的大小必须相同,或者其中之一可以是标量。
有没有办法在不迭代每一行的情况下做到这一点?
最佳答案
您可以使用ismember
您可以在其中输入字符串元胞数组,它将输出一个逻辑向量,该向量告诉您字符串元胞数组中的哪些元素出现在源数组中。
使用 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), :);
关于matlab - 比较两个表中的字符串matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45595456/