2013-03-30 47 views
4

對於由'0'和'1'組成的矩陣A的每一列,我想查找第一次出現的列索引'1'如果存在。例如,如果A被定義爲:Matlab:查找矩陣每列的第一次出現的行指數(不使用循環)

A=[0 0 0 0; 
0 0 0 1; 
0 0 0 0; 
0 0 0 1; 
1 0 0 0; 
0 1 0 1; 
1 1 0 0] 

那麼結果將是:

b=[5 6 2] 

我在尋找的溶液而沒有任何「的」或「而」循環。我想出了

一個解決方案:

[b,~]=find(cumsum(cumsum(A))==1) 

有沒有更優雅的方式來做到這一點?

回答

4

這比發佈的任何內容都短,而且是一行代碼。 代碼:

[~,idx] = max(A(:,sum(A)>0)); 

輸出:

idx = 

    5  6  2 

編輯:剛剛意識到你可以這樣做:

[~,idx] = max(A(:,any(A))) 
+0

這個亙古不知道哪些列不會IDX的元素屬於 –

4

@Nacer - 很好的答案。默認情況下[a,m,c] =唯一(J)返回矢量m以指示最後發生在J.中的每個唯一值。使用[~,m] = unique(J, 'first');代替。

[I,J] = find(A==1); 
[~,m] = unique(J, 'first'); 
I(m) 

ans =  
    5 
    6 
    2