2014-11-18 2 views
1

나는 A = [NAN 0.9 0.8 0.7; NAN NAN 0.7 0; 열은 NAN 다음 마지막 NAN 요소의 인덱스를 돌려줍니다 포함되어있는 경우 NAN NAN NAN NAN]와행렬에서 요소와 그 인덱스를 분리

내가 A-의 모든 열을 위해 MATLAB 드리려고

을 말하고 싶어, 다른 각 열에서 최대 값을 찾아 값과 인덱스를 반환합니다.

따라서 궁극적으로 저는이 특정 예제에 대해 값 벡터 = 0.9,0.7, NA 및 인덱스 벡터 = 2, 3, 4와 같은 벡터를 갖게됩니다. 그리고

나는 "else else"루프를 for 루프 안에 시도 할 수 있다고 생각하지만 어떻게해야할지 모르겠다. 누구든지 도와 줄 수 있습니까?

미리 감사드립니다.

답변

4

하면 비교적 쉽게 max를 이용하여이를 수행 할 수

A = [NaN 0.9 0.8 0.7; NaN NaN 0.7 0; NaN NaN NaN NaN]; 
[max_val,max_ind] = max(A,[],2); 
max_ind(isnan(max_val)) = size(A,2); 

최대의 제 2 출력은 최대 값의 인덱스이다. 기본적으로 모든 값이 NaN이 아닌 한 NaN 값을 무시합니다.이 경우 1을 반환합니다.이 스 니펫의 세 번째 행은 최대 값이 NaN 인 값 (즉, 전체 행이 NaN)을 찾은 다음 인덱스를 행의 길이

+0

도움을 주셔서 감사합니다. – Aditya

0

여기는 간단하고 무차별 한 방법입니다. MrAzzaman의 기교에 박수를 보냅니다.

for j = 1:size(A,2) 
    if sum(isnan(A(:,j))) == size(A,1) 
     valueVec(j) = NaN; 
     indexVec(j) = size(A,1); 
    else 
     [valueVec(j),indexVec(j)] = max(A(:,j)); 
    end 
end 
+0

도움을 주셔서 감사합니다. – Aditya

관련 문제