如何在单元阵列MATLAB中找到一行的子立场



我的单元格数组如下:

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];

,我需要找到:

的subitem的一行。
[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

然后,您可以通过cellfunismemberall应用于每个单元的内容。结果是逻辑向量,您可以从中获得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));

相关内容

最新更新