String 如何在MATLAB中搜索单元格数组中的字符串?
假设我有细胞阵列String 如何在MATLAB中搜索单元格数组中的字符串?,string,matlab,cell-array,String,Matlab,Cell Array,假设我有细胞阵列 strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} 如果我想找到'KU'的索引,我该怎么办?你试过了吗 indices = Find(strs, 'KU') 看 或者 indices = strfind(strs, 'KU'); 如果我没有弄错的话,也应该可以工作。我想下面的代码可以做到这一点: strs = {'HA' 'KU' 'LA' 'MA' 'TATA'} ind=find(ismember(strs,'KU')) 这是回报 ans =
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
如果我想找到'KU'
的索引,我该怎么办?你试过了吗
indices = Find(strs, 'KU')
看
或者
indices = strfind(strs, 'KU');
如果我没有弄错的话,也应该可以工作。我想下面的代码可以做到这一点:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ind=find(ismember(strs,'KU'))
这是回报
ans =
2
对于这种情况,其他答案可能更简单,但为了完整性,我想我会添加cellfun与匿名函数的用法
indices = find(cellfun(@(x) strcmp(x,'KU'), strs))
它的优点是,您可以轻松地使其不区分大小写,或者在具有结构单元阵列的情况下使用它:
indices = find(cellfun(@(x) strcmpi(x.stringfield,'KU'), strs))
strcmp和strcmpi函数是最直接的方法。他们搜索数组
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
ix = find(strcmp(strs, 'KU'))
自2011a起,推荐的方式为:
booleanIndex = strcmp('KU', strs)
如果要获取整数索引(通常不需要),可以使用:
integerIndex = find(booleanIndex);
strfind
已被弃用,因此请尽量不要使用它
>> strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
>> tic; ind=find(ismember(strs,'KU')); toc
运行时间为0.001976秒
>> tic; find(strcmp('KU', strs)); toc
运行时间为0.000014秒
因此,很明显,
strcmp('KU',strs)
比ismember(strs,'KU')花费的时间要少得多。
我发现每个人都忽略了代码中最重要的缺陷:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'}
应该是:
strs = {'HA' 'KU' 'NA' 'MA' 'TATA'}
或
现在如果你坚持使用
ind=find(ismember(strs,'KU'))
您将有:)。最短代码:
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)
但它只返回
strs
中的第一个位置。如果未找到元素,则ind=0
我已尝试查找,但由于数组是单元格数组,因此MATLAB返回了一些错误。。。但是strfind函数似乎起作用了,谢谢!请记住,这种通用解决方案很好,因为它适用于多种数据类型,但只适用于精确匹配。如果需要不区分大小写的匹配,请参阅。如果您需要匹配更复杂的东西,如正则表达式或结构中的字段,请参阅ismember有点笨重,可以使用新版本进行更新。我觉得使用基于str的函数(如strcmpi等)更安全。它在八度音阶下工作,注意当前的顶级答案已经过时了。一定要检查。太好了!你的解决方案应该是最好的!是的,我同意,这是最好的解决方案,但这只是andreys和vidars解决方案之间的比较。所以实际上andrey应该得到它。事实上,应该指出,如果你比较两个不同大小的数组(即,如果左边不是'KU',而是一个字符串数组),那么这个方法不起作用。维达尔的解决方案在这种情况下确实有效(相当不错),因此更为通用。@pankaj:这与制作字符串->索引的映射,然后通过映射查找来获取索引相比如何?问性能问题。我正要编辑原始问题,但看到太多答案:)
strs = {'HA' 'KU' 'LA' 'MA' 'TATA'};
[~,ind]=ismember('KU', strs)