我知道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.
有没有办法在不迭代每一行的情况下做到这一点?
答案 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), :);