2013-03-16 16 views
0

我有數據如下圖所示:找哪家fullfill一定條件的數據集

for a=1:2 
    for b=1:2 
     for c=1:2 
      for d=1:2 
       m{a,b}{c,d}=zeros(3,3); 
      end 
     end 
    end 
end 

m{1,1}{1,1}=[6 1 4;3 7 2;1 5 6]; %pass 
m{1,1}{1,2}=[3 5 4;9 2 7;5 5 6]; 
m{1,1}{2,1}=[5 2 3;5 9 5;2 2 3]; 
m{1,1}{2,2}=[2 1 0;3 5 6;8 8 8]; 

m{1,2}{1,1}=[2 1 3;5 6 7;3 5 5]; 
m{1,2}{1,2}=[6 2 4;7 7 9;3 5 8];%pass 
m{1,2}{2,1}=[1 2 2;4 5 5;2 6 7]; 
m{1,2}{2,2}=[3 3 1;2 4 5;6 7 5]; 

m{2,1}{1,1}=[2 5 0;3 7 6;8 6 8]; 
m{2,1}{1,2}=[3 6 4;3 2 7;5 8 6]; 
m{2,1}{2,1}=[3 9 1;2 1 5;6 2 8]; 
m{2,1}{2,2}=[9 1 4;9 7 7;5 2 8];%pass 

m{2,2}{1,1}=[0 5 0;3 2 6;8 6 9]; 
m{2,2}{1,2}=[1 2 7;5 2 5;4 2 6]; 
m{2,2}{2,1}=[2 1 3;2 4 6;6 9 5]; 
m{2,2}{2,2}=[3 7 1;1 4 5;6 9 3]; 

我想借對角線每一組數據,並檢查所有這些數字是否大於5。

例如,m {1,1} {1,1}的對角線分別是6,7和6,大於5,因此滿足條件。此外,我需要知道通過條件的數據集的位置。在本例中,數據集m {1,1} {1,1},m {1,2} {1,2}的結果,和m {2,1} {2,2}是pass。

任何想法要做到這一點〜謝謝〜

回答

1
a=cellfun(@(x) cellfun(@(y) all(diag(y)>5),x),m,'uniformoutput',false) 

你可以找到裏面:)

+0

笑,完全一樣,這裏有我的upvote :) – 2013-03-16 12:14:56

+0

什麼是x和y分別代表??謝謝你的解釋〜 – 2013-03-16 12:31:33

+0

Tony YEe:你有細胞陣列中的細胞,合作出來呃細胞的樂趣在m個細胞上運行(這是x)。在每個單元格中,您需要處理內部單元 - 這是內部單元格函數,它在y上運行。 – Mercury 2013-03-16 14:17:46

2
t=cellfun(@(mii) cellfun(@(mjj) all(diag(mjj)>5),mii),m,'uni',false); 

t = 
    [2x2 logical] [2x2 logical] 
    [2x2 logical] [2x2 logical] 

t{1,1} = 
    1  0 
    0  0 

所以m{1,1}{1,1}是真實的答案,m{1,1}{1,2}是假的,等

+1

我不能相信這些年來我可以寫'uni'而不是'uniformoutput'。謝謝! – Mercury 2013-03-16 14:20:40