2013-01-13 2 views
1

안녕하세요 저는 Matlab (PDS (:, 39))의 값 열을 가지고 있습니다. 이 열은 다양한 항목에 대해 필터링되며 유효한 행의 경우 0 또는 유효하지 않은 행의 경우 -1 인 두 개의 별도의 플래그 표시 열 (PDS (:, [41 81])이 있습니다. 나는 유효한 데이터의 평균을 취하고 평균이 0보다 큰 경우이 값을 유효하지 않게 만들고 평균값이 특정 값 (이 경우 0.2) 이하가 될 때까지 다시 평균을 취하고 싶습니다. 여기 내 코드입니다 :Matlab에서 반복적으로 열의 평균을 취합니다.

% identify the VALID values 
U1 = (PDS(:,81)==0); 
F1 = (PDS(:,41)==0); 

% only calculate using the valid elements 
shearave = mean(PDS(U1&F1,39)); 

while shearave > 0.2 
    clear im 
    % determine the largest shear value overall for filtered and 
    % non-flagged 
    [c im] = max(PDS(U1&F1,39)); 
    % make this value a NaN 
    PDS(im,39)=NaN; 
    % filter using a specific column and the overall column 
    PDS(im,41)=-1; 
    F1 = (PDS(:,41)==0); 
    % calculate shear ave again using new flagging column - remove the ";" so I can see  the average change 
    shearave = mean(PDS(U1&F1,39)) 
end 

matlab에 저를 준다 출력은 다음과 같습니다

shearave =

0.3032

shearave =

0.3032

shearave =

,515,

0.3032

등 루프는 새로운 유효 데이터로 재 evalulating되지

. 이 문제를 어떻게 해결합니까? 휴식을 취하거나 계속해야합니까? 아니면 다른 유형의 루프일까요? 어떤 도움을 주셔서 감사합니다.

답변

2

당신은 루프를 사용할 필요가 없습니다, 나는 다음 할 거라고 :

종류의 데이터 :

y = cumsum(x)./[1:numel(x)]'; 
:

m=PDS(U1&F1,39); 
[x isort]=sort(m); 

그런 다음 정렬 된 벡터의 누적 평균을 계산을

그런 다음 0.2에서 자르고 발견 된 색인을 사용하여 필요한 값을 검색하십시오.

+0

+1 매우 영리합니다. –

+0

예, 방금 같은 결론에 도달했습니다. 내림차순으로 정렬하고 평균값이 0.2 미만이 될 때까지 값을 제거하여 타임 스탬프로 제거해야하는 값을 식별했습니다. 나는 내 마음 속에서 반복했다. 도움이 될 것이다. 감사! – user1854628

0

반복적으로 열 39의 값을 NaN으로 바꿉니다. 그러나 meanNaN을 무시하지 않고 대신 새로운 평균으로 NaN을 반환합니다. 당신은 약간의 실험이를 볼 수 있습니다

>> mean([3, 4, 2, NaN, 4, 1]) 
ans = NaN 

따라서, shearave < 0.2true이 될하지 않습니다.

관련 문제