NaN 에 대해 질문있습니다.

게시판 IDL Q&A NaN 에 대해 질문있습니다.

3 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #920 Reply
      inmyta27
      회원

      먼저 읽어드리는 데이터는
      DATE DZ CZ VR DR KD PH RH
      201206231407 24.029 28.731 2.645 2.399 -NaN 37.559 0.993
      201206231412 40.333 40.333 2.951 2.713 -NaN 21.418 0.988
      201206231417 41.806 41.806 3.281 2.231 -NaN 22.954 0.989
      201206231422 37.444 37.444 3.399 1.699 -NaN 20.000 0.979
      201206231425 40.556 40.556 3.411 2.001 0.940 21.182 0.991
      201206231427 38.750 38.750 3.456 1.568 -NaN 20.117 0.984
      201206231430 42.667 42.667 3.398 1.891 -NaN 20.866 0.993
      201206231432 43.306 43.306 3.774 2.043 0.281 20.237 0.992
      201206231437 42.028 42.028 3.304 1.858 0.283 20.983 0.994

      다음과 같이 시간별로 변수값이 있습니다. 그런데 KD 라는 열의 자료에는 -NaN 이라는 변수가 포함되어있는데 이 형태와 똑같은 자료인 어떤 자료와 서로 scatter plot으로 비교를 하고 그들의 regress를 살펴보는데 다른 파일에는 KD 자료가 제대로 있지만 다른 파일은 위 파일로 -NaN이 포함되어있습니다.
      해서 아래 KD 변수값에 대한 regress를 구할때 nan 값을 제외하고는 구할 수 없을까요?
      Nan 값때문에 아래 plot도 안되서…
      시간별로 nan 값은 녀석들은 제외하고 regress와 plot을 하고 싶습니다.

      c=regress(kdp, KD_5,/double, correlation=kdp_cor, Yfit=kdp_fit, const=kdp_const)
      kdp_rmse=sqrt(total((kdp – KD_5)^2)/(n_elements(kdp)))
      kdp_bias=mean((kdp – KD_5))

      plot, kdp, KD_5,color=0, XSTYLE=1,YSTYLE=1,$
      TITLE=’Specific Differential Phase, KDP[deg/km]’,XTITLE=’2DVD’, YTITLE=’BSL’,$
      charthick=2.5,CHARSIZE=1.5,thick=1.7, psym=1

      oplot, kdp, kdp_fit, thick=3, color=50

    • #928 Reply
      Jonghyuk
      회원

      데이터를 읽는 데는 문제가 없으셨는지요?
      어떤 방식으로 데이터를 읽으셨는지 모르겠습니다. 문자열로 읽어서 다시 숫자로 변환한 것인지…

      어쨌든 이런 상황에서 WHERE() 함수를 쓰는 것이 답일 것 같습니다. 상황을 정확히 모르겠으나,
      ok=where(finite(kd))
      c=regress(kdp[ok], kd_5[ok])
      와 같이 kd가 NaN이 아닌 것만 추려서 계산을 하고 플롯도 이와 같이 하시면 됩니다.
      그런데, NaN이 IDL이 인식하는 NaN으로 읽으신 것인지 문자열 NaN의 상태인지(그렇다면 다른 숫자도 사실상 문자열로 읽으신 것인지) 상황은 잘 모르겠습니다만 개요는 Where() 함수로 NaN이 아닌 행을 찾아서 그 행의 데이터만 사용하는 것입니다.

    • #932 Reply
      inmyta27
      회원

      읽을때 모두 실수형 숫자로 읽었습니다. 다른값들은 각 열마다 잘 읽히는데..
      NaN이 있는 KDP 열만 문제가 있엇습니다.
      제가 가령
      D Kd_5 Kd
      1 10.1 -NaN
      2 10.2 -NaN
      3 10.3 10.4
      4 10.5 10.6
      5 10.7 10.8

      위 데이터처럼 두 Kd_5와 kd의 regress나 scatter plot 으로 서로 비교하고싶다면
      위에 말씀하신 where을 쓰면 kd는 D가 1,2,3 에 해당하는 값을… Kd_5도 D가 1,2,3에 해당되는
      값들만 regress 하고 plot도 되게 되는건가요?

    • #933 Reply
      Jonghyuk
      회원

      새로 올려 주신 것과 같이 간단한 데이터 예제파일을 읽었다고 생각하면 배열에 다음과 같이 들어 있을 것입니다.

      D=[1,2,3,4,5]
      Kd_5=[10.1, 10.2, 10.3, 10.5, 10.7]
      kd=[!values.f_nan, !values.f_nan, 10.4, 10.6, 10.8]

      마지막 kd는 추측입니다. help, kd[0]
      과 같이 해 보시면 float 형의 NaN으로 들어 있는지 확인해 보실 수 있습니다.

      배열 번호는 0부터 시작하므로, 0, 1, 2, 3, 4 가 됩니다(다섯줄짜리 파일의 상황이라면)

      ok=where(finite(kd))
      를 실행하면 ok=[2,3,4] 가 될 것입니다. 0번과 1번에 해당하는 kd값은 유한수(finite함수가 체크하는 것이 유한수이냐 하는 것으로 NaN과 Infinity는 False로 리턴합니다)가 아니므로 2번, 3번, 4번이 조건을 만족한다고 리턴하는 겁니다.

      이후에는 kd_5[ok] 와 kd[ok] 만 가지고 작업을 진행하시면 될 것 같습니다.
      print, kd_5[ok] 를 해 보시면 10.3, 10.5, 10.7 이 될 것이고,
      print, kd[ok] 를 해 보시면, 10.4, 10.6, 10.8 이 될 것입니다.

      이 설명은 kd의 NaN 값이 IDL이 인식하는 수치형 NaN(문자열 아님)인 !values.f_nan으로 들어 있을 경우 유효합니다. mean() 같은 함수는 /NAN 키워드가 있어서 NaN을 제끼고 평균내는 기능도 있습니다.

      print, mean(kd, /NAN)

3 답변 글타래를 보이고 있습니다
'NaN 에 대해 질문있습니다.'에 답변달기
글쓴이 정보: