查找单元格数组中的子集

时间:2014-03-26 13:01:24

标签: matlab

考虑一个单元格数组I,其中

I = { [i_1 ; i_2 ; .... ; i_n] [i_1,i_2 ; i_1,i_3; ...; i_n,i_n-1 ].. [ % all NCi combinations] ...}

现在,我想找到每个单元格的每一行显示为不同单元格的另一行的子集的次数。

例如,我想找到i_1i_2在整个单元格数组的同一行中出现的次数。

I = {[1;2;3] [(1,2);(2,3);(1,3)] [1,2,3]}

ans = 2。 (一次在第二个单元格的第一行,一次在第三个单元格的唯一一行)。

我一直在和这个成员尝试不同的事情,但我只是无法得到它。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这是一个利用"行"的解决方案。 ismember的参数(请注意,使用此方法[1 2]中会找到[1 2 3]。)

I = {[1;2;3],[1,2;2,3;1,3],[1,2,3]};
bait = [1 2];
baitCols = size(bait,2);

%# identify cells with sufficient columns for comparison
goodIdx = cellfun(@(x)size(x,2) >= baitCols,I);

%# count all occurrences
count = sum(cellfun(@(x)sum(ismember(x(:,1:baitCols),bait,'rows')),I(goodIdx)));

答案 1 :(得分:0)

快速而肮脏的循环:

 I = {[1;2;3],[1,2;2,3;1,3],[1,2,3]};
 i_1 = 1;
 i_2 = 2;

 count = 0;
 for ii=1:numel(I),
     for jj=1:size(I{ii},1)
         if any(I{ii}(jj,:)==i_1) && any(I{ii}(jj,:)==i_2)
             count = count+1;
         end
     end
 end