我有如下的元胞数组:
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{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
然后,您可以申请ismember
和 all
通过 cellfun
到每个单元格的内容.结果是一个逻辑向量,您可以使用 find
从中获得所需的索引:
result = find(cellfun(@(x) all(ismember(x, t)), S));
另一种方法(我不知道在你的情况下哪个更快)是通过计算所有与 bsxfun
的成对比较来替换 ismember
然后申请any
:
result = find(cellfun(@(x) all(any(bsxfun(@eq, t(:), x(:).'), 1)), S));
关于matlab - 如何在元胞数组matlab中找到一行的子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44408921/