【问题标题】:how to find subitems of a row in cell array matlab?如何在单元格数组matlab中找到一行的子项?
【发布时间】:2017-11-08 14:05:05
【问题描述】:

我有如下单元格数组:

S{1} = [10,20,30,40,50];
S{2} = [10,20,40,50];
S{3} = [10,50,510];
S{4} = [10,20,70,40,60];
S{5} = [20,40];

并且,我需要找到属于以下子项的单元格行:

[10,20,30,40,50,60]

以上示例结果为:

1,2,5 

因为第 1 行和第 2 行和第 5 行只有 [10,20,30,40,50,60] 的子项。

在我的工作中,单元格数组很大。我需要一个快速的代码。

【问题讨论】:

  • 你写它的方式 S 不是一个单元格。你的意思是S{1}=..
  • 是的。单元格定义已编辑

标签: matlab cell subitem


【解决方案1】:

S{1} = [10,20,30,40,50];
S{2} = [10,20,40,50];
S{3} = [10,50,510];
S{4} = [10,20,70,40,60];
S{5} = [20,40];            % data
t = [10,20,30,40,50,60];   % target values

然后,您可以通过cellfunismemberall 应用于每个单元格的内容。结果是一个逻辑向量,您可以从中获得所需的索引find

result = find(cellfun(@(x) all(ismember(x, t)), S));

另一种选择(我不知道在您的情况下哪个更快)是通过计算所有与bsxfun 的成对比较然后应用any 来替换ismember

result = find(cellfun(@(x) all(any(bsxfun(@eq, t(:), x(:).'), 1)), S));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    • 2015-08-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多