2015-04-06 60 views
0

M是由若干子矩陣Ai組成的矩陣4x2000000,因此Ai(1:3,j)j = 1,...,size(Ai,2)是相同的向量。和Ai(4,j)1100之間的值。在某些條件下還原矩陣

V = [2 15 21 43] 

我的目標是要消除所有子矩陣的MAi,如果Ai(4,:)不包含V所有的值。

對這個問題的唯一初始數據MV

實施例:

M = [1022 3001 4451 1022 1022 3001 1022 3001 3001 1022; 
     112 45 10 112 112 45 11 45 99 112; 
     500 11 55 500 500 11 88 11 1 500; 
     2  6  3 5 71  2 2 71 5 88] 

A1 = [1022 1022 1022 1022; 
     112 112 112 112; 
     500 500 500 500; 
     2 5 71 88] 

A2 = [3001 3001 3001; 
     45 45 45; 
     11 11 11; 
     6 2 71] 

A3 = [4451; 
     10; 
     55; 
     3] 

A4 = [1022; 
     11; 
     88; 
     2] 

A5 =[3001; 
     99; 
     1; 
     5] 

如果V = [2 71]

預期的輸出(列的順序並不重要):

[1022 1022 1022 1022 3001 3001 3001; 
    112 112 112 112 45 45 45; 
    500 500 500 500 11 11 11; 
    2 5 71 88 6 2 71] 
+0

所有值或任何值? – Divakar

+0

@Divakar:所有值 – bzak

+0

後採樣輸入數據和預期輸出? – Divakar

回答

3

一種方法 -

[~,~,idx] = unique(M(1:3,:)','rows') %//' 
valid = ismember(M(4,:),V) 
valid_idx = accumarray(idx(valid),M(4,valid).',[],@(x) ... 
           numel(unique(x)))>=numel(V) %//' 
out = M(:,ismember(idx,find(valid_idx))) 
+1

我特別喜歡第二個! –

+0

@Divakar:非常感謝Divakar。 – bzak

+0

@bzak有一個錯誤,修復了這個問題。基本上,如果第五列在第四行有'71'以外的東西,它仍然在考慮輸出'A1',這是錯誤的。現在都很好! – Divakar