Matlab 查找单元格数组(本身是struc的一部分)中字符串的所有出现处
我有以下结构Matlab 查找单元格数组(本身是struc的一部分)中字符串的所有出现处,matlab,Matlab,我有以下结构 dataDens = dens: [1x172 double] level: {1x172 cell} raga: {1x172 cell} 其中dataDens.raga包含(为了简单起见,减少下面的列数) 我想找到“Tori”出现的索引(即上面的例子中的[23])。但是,我尝试的所有命令(如下)要么给出错误,要么返回空白输出。我认为这可能只是在某个地方添加/删除一个花括号,或者使用一些转换;但我已经束手无策了,希望有人能帮我澄清一下 indic
dataDens =
dens: [1x172 double]
level: {1x172 cell}
raga: {1x172 cell}
其中dataDens.raga包含(为了简单起见,减少下面的列数)
我想找到“Tori”出现的索引(即上面的例子中的[23])。但是,我尝试的所有命令(如下)要么给出错误,要么返回空白输出。我认为这可能只是在某个地方添加/删除一个花括号,或者使用一些转换;但我已经束手无策了,希望有人能帮我澄清一下
indices = find(strcmp([dataDens.raga{:}], {'Tori'}))
indices = ismember('Tori', dataDens.raga)
[if,where] = ismember('Tori', dataDens.raga)
这个问题确实与括号有关<代码>[dataDens.raga{:}]将导致字符数组的串联,如下所示:
>> [dataDens.raga{:}]
ans =
'MultaniToriTori'
使用strcmp将其与'Tori'
进行比较将导致错误,因为没有精确的匹配。但是,您可以使用strcmp
比较整个单元格,然后返回一个布尔数组,其中find
可用于获取true
项的索引:
indices = find(strcmp(data, {'Tori'}))
或者,ismember
也可以工作,但是使用ismember('Tori',dataDens.raga)
可以检查'Tori'
是否在dataDens.raga
中,而不是相反。将此更改为
ismember(dataDens.raga, 'Tori')
将再次给您一个布尔数组,
find
将获得您正在查找的索引 对于index=find(strcmp([dataDens.raga{:}],{'Tori'}))
,返回true或false,因此该命令将不起作用。您可以使用对循环进行迭代。只需index=find(strcmp(dataDens.raga,{'Tori'}))
应该可以正常工作(查看[dataDens.raga{:}]
的输出以了解原因)<代码>索引=查找(ismember(dataDens.raga,'Tori')
也有效。您正在按错误的顺序检查成员身份…@medicine\u manfind
然后将返回真实值的索引,这是op想要的,对吗?因此使用find
不是这里的问题,正在比较的是错误的。正确,问题不在于find
本身。
ismember(dataDens.raga, 'Tori')