【问题标题】:Matlab, Find cell elementsMatlab,查找单元格元素
【发布时间】:2013-08-06 04:12:15
【问题描述】:

我有两个字符串 A 和 B 的单元格数组。B 的所有单元格也在 A 中。我想在 A 中找到 B 的单元格的索引。谢谢。

例子:

A=
 'aaaa'
 'bbbb'
 'cccc'
 'dddd'
 'ffff'

B=
 'ffff'
 'aaaa'

ans=
  5
  1

ans=
  1
  5

【问题讨论】:

标签: string matlab find cell


【解决方案1】:

你可以很简单地做到这一点,使用下面的代码

indices = cell(size(B));
for i = 1:numel(B)
    indices{i} = find(strcmpi(A,B(i)));
end

虽然我建议使用ismemberintersect,但这些解决方案无法处理不区分大小写的解决方案。此外,这些方法不会指示特定索引匹配了多少次,我的解决方案将返回与每次比较匹配的所有索引。

更新

我正在运行的代码来测试它。

A={'aaaa','bbbb','cccc','dddd','ffff','aaaa'};
B={'ffff','aaaa','cccc','qwerty'};
indices = cell(size(B));
for i = 1:numel(B)
    indices{i} = find(strcmpi(A,B(i)));
end
indices

返回以下内容

indices = 

    [5]    [1x2 double]    [3]    [1x0 double]

我看不出你哪里有问题

【讨论】:

  • 如果您可以使用ismemberintersect,这有多简单?
  • 两者都很简单。这是一个没有任何研究的快速解决方案。但我确实同意 ismemberintersect 更适合这个,除非你想找到不区分大小写的匹配项
  • @Fatime 它是怎么不工作的,请解释一下,以便我可以编辑它以确保它可以工作
  • @MZimmerman6 谢谢。如果find的结果为空,我认为有问题。
  • @Fatime 没有匹配的时候没有问题吧?我用一个没有匹配的成员运行它,并且没有问题,我更新了上面的代码以准确显示我正在运行的内容。您正在运行什么版本的 MATLAB,也许与它有关?我不知道。
【解决方案2】:

使用intersectismember

[~, idxInA] = intersect(A,B)

LocInA = find(ismember(A,B))

【讨论】:

  • 您需要find(ismember(A, B)) 才能获得指定的答案。
  • 我同意,我已经改变了它......因此相交更好:D
  • +1 好答案。我不知道 intersect 函数返回的索引。
  • 但如果A 中没有重复,ismember 的第二个输出也会起作用:[x, y]=ismember(B,A)
  • @Nick 感谢您的回答。
猜你喜欢
  • 2013-04-26
  • 2017-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-15
相关资源
最近更新 更多