如果我理解正確,您有多組配對:Mat1
,Mat2
,Mat3
,... MatN
。現在你想找到唯一的配對,然後找出每個獨特配對出現在哪一組中。
如果你有大量的套,我建議你開始使用cell array持有所有這些,使事情更容易:
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
若要將此交集矩陣轉換爲每對的一組矩陣號,再次循環並將最終結果存儲在單元陣列中(不能使用數組,因爲它們的大小可能不一樣(僅限於某些對一旦發現,其他兩次,其他三次......)
pair_occurence= cell(M,1);
d=1:N;
for jj=1:M
pair_occurence{jj} = d(matcontpair(jj,:));
end
現在你有大小包含唯一對Mx2
的矩陣uniq_pairs
和occurence單元陣列大小Mx1
的pair_occurence
:每個單元對應於一對幷包含該對存在的矩陣列表。
如果你想從列表中刪除對它們只在一個矩陣目前,使用以下命令:
% find them
lonely_pairs = cellfun(@numel,pair_occurence)<2;
% and destroy them
uniq_pairs(lonely_pairs,:) = [];
pair_occurence(lonely_pairs) = [];
可以肯定的是:如果在所有三個矩陣中出現配對,您想查看哪些內容?所有三個兩兩發生? –