私が正しく理解していれば、あなたはいくつかのペアのセットを持っています:Mat1
、、、、...。次に、一意のペアを見つけてから、すべての一意のペアがどのセットに表示されるかを調べます。Mat2
Mat3
MatN
セットの数が多い場合は、セル配列を使用してそれらすべてを保持することをお勧めします。これにより、作業が非常に簡単になります。
N = 3; % total number of data sets
Mat = cell(N,1);
Mat{1} = [1 2;
1 3;
2 4;
3 1;
4 5];
Mat{2} = [1 3;
2 6;
3 1;
3 5];
Mat{3} = [2 6;
2 5;
3 1;
5 2];
% etc.
まず、一意のペアを見つけましょう。
uniq_pairs = unique(cat(1,Mat{:}),'rows');
M = size(uniq_pairs ,1);
次に、ismemberを使用して、どのセットにどのペアが含まれているかを確認します。
matcontpair = false(M,N); %preallocate
for ii=1:N % unavoidable loop
matcontpair(:,ii) = ismember(uniq_pairs,Mat{ii},'rows');
end
この交差行列を各ペアの行列番号のセットに変換するには、もう一度ループして、最終結果をセル配列に格納します(同じサイズではない可能性があるため、配列を使用することはできません(一部のペアのみが見つかりました) 1回、他の2回、他の3回...)
pair_occurence= cell(M,1);
d=1:N;
for jj=1:M
pair_occurence{jj} = d(matcontpair(jj,:));
end
これで、一意のペアを含むuniq_pairs
サイズの行列と、サイズのオカレンスセル配列ができました。各セルはペアに対応し、ペアが存在する行列のリストが含まれています。Mx2
pair_occurence
Mx1
1つのマトリックスにのみ存在するペアをリストから削除する場合は、次を使用します。
% find them
lonely_pairs = cellfun(@numel,pair_occurence)<2;
% and destroy them
uniq_pairs(lonely_pairs,:) = [];
pair_occurence(lonely_pairs) = [];