我的单元格数组如下:
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
然后,您可以通过cellfun
将ismember
和all
应用于每个单元的内容。结果是逻辑向量,您可以从中获得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));