2013-03-30 2 views
4

'0'과 '1'로 이루어진 행렬 A의 각 열에 대해 첫 번째 항목의 열 색인을 찾고 싶습니다. 존재하는 경우 '1'입니다. 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의 요소가 속한 않는 열 말할 doesnot : 그냥 당신이 할 수있는 실현 –

4

@Nacer - 좋은 답변입니다. 기본적으로 [a, m, c] = unique (J)는 벡터 m을 반환하고 의 마지막 숫자는입니다. 대신 [~,m] = unique(J, 'first');을 사용하십시오.

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

ans =  
    5 
    6 
    2