如何在单元格数组matlab中找到一行的子项?

hoj*_*.mi 2 matlab cell subitem

我的单元格数组如下:

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];
Run Code Online (Sandbox Code Playgroud)

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

[10,20,30,40,50,60]
Run Code Online (Sandbox Code Playgroud)

以上示例结果是:

1,2,5 
Run Code Online (Sandbox Code Playgroud)

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

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

Lui*_*ndo 7

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
Run Code Online (Sandbox Code Playgroud)

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

result = find(cellfun(@(x) all(ismember(x, t)), S));
Run Code Online (Sandbox Code Playgroud)

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

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