cellfun を使用することもできますが、ここで述べたように、それは良い考えではありません。
これを行うには、1 つのループを使用します。
c{1}=[1 2 3 4 5 6]; c{2}=[1 3 5 7];c{3}=[2 4 6 8];
c{4}=[1 4 6];c{5}=[3 7];
cSize = numel( c);
isect=cell(1,cSize)
for k=1:cSize
isect{k}=cellfun(@(in) intersect(in,c{k}),c,'UniformOutput',false);
end
この手順を繰り返して、次の場合に他の手順を排除できます。
c{1}=[1 2 3 4 5 6]; c{2}=[1 3 5 7];c{3}=[2 4 6 8];
c{4}=[1 4 6];c{5}=[3 7];
isect=cellfun(@(in) cellfun(@(in2) intersect(in,in2),c,'UniformOutput',false),c,'UniformOutput',false);
isect{i}{j}
c{i}
は からへの交差点です{j}
注: cellfun はセル値に対して内部的にループを実行するため、実際にはループを削除していません。
これは最初の質問ではありませんでしたが、サブセットを見つけるには:
c{1}=[1 2 3 4 5 6]; c{2}=[1 3 5 7];c{3}=[2 4 6 8];
c{4}=[1 4 6];c{5}=[3 7];c{6}=[];
isSubset=cell2mat(cellfun(@(in) cellfun(@(in2) isequal(intersect(in,in2),in)|isempty(in),c),c,'UniformOutput',false)');
結果:
isSubset =
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
1 0 0 1 0 0
0 1 0 0 1 0
1 1 1 1 1 1
k
がのサブセットである場合、ブール値を返しm
ますisSubset(k,m)
。