Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在MATLAB中搜索单元格数组中的字符串?_String_Matlab_Cell Array - Fatal编程技术网

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)