NaN을 0으로 대처하고 싶습니다.

게시판 IDL Q&A NaN을 0으로 대처하고 싶습니다.

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

      for jj=0,29 do begin

      sum_nd=0.
      sum_nu=0.

      kk=(0.1+(0.2*jj))

      for ii=0, line_count-1 do begin

      if (nd[ii] gt 0.) then begin
      if abs(interval[ii]-kk) lt 0.001 then begin

      sum_nd=sum_nd+nd[ii]
      sum_nu=sum_nu+1.

      endif
      endif

      endfor

      avg_nd=sum_nd/sum_nu
      print, kk, avg_nd

      ;;;;;;;;;;;;;;;;;
      값을 추출하면 kk에 맞게 avg_nd 값이 있는 부분은 값이 나오지만..
      없는 부분은 -NaN 으로 출력되는데
      이 부분을 0값으로 처리할 수 있나요?

    • #739 Reply
      ygpark
      회원

      지나가다 도움이 되실까해서 댓글 남겨봅니다.
      IDL 함수중에 FINITE 라는 함수가 있습니다. 변수가 NaN 인지 아닌지, 또는 INFINITY 인지 아닌지를 검사할 수 있습니다. 이 함수를 사용하면 되지 않을까 싶은데요..
      자세한 방법은 도움말에서 finite 를 검색하시면 상세한 사용방법을 확인하실 수 있습니다.
      도움이 되셨기를..

    • #740 Reply
      Sangwoo
      회원

      제 생각에는 그냥 마지막의 print문 앞에서 avg_nd가 NaN인가 아닌가를 판단하고, 만약 NaN인 경우에는 avg_nd의 값을 0으로 대입해버리는 방법이 어떨까 합니다. 물론 이 과정에서 NaN이냐 아니냐를 판단할 때에는 FINITE 함수를 사용하여 그 값이 0인 경우가 NaN에 해당된다는 점만 참조하면 됩니다. FINITE 함수의 사용법에 대해서는 IDL 도움말에서 검색해보시면 자세한 내용이 나옵니다.

    • #742 Reply
      익명
      비활성

      avg_nd = 0./0. 가 되면 -NaN이 발생합니다.
      그냥 sum_nu가 0.이면 하나도 없는 거니까,
      그 때에만 avg_nd에 0을 주면 되지 않나 싶은데요.

    • #749 Reply
      Sangwoo
      회원

      그렇죠. 어차피 방법은 여러가지입니다. 0을 나눈 결과값에 대해서 FINITE 함수를 적용해서 그게 0이냐 1이냐를 판단함으로써 작업을 하는 방식도 되고, 아예 0으로 나눠지는 상황을 사전에 방지하는 방법도 가능합니다. 이 부분에 대한 처리방식은 프로그래머의 선택의 문제가 되겠지요.

4 답변 글타래를 보이고 있습니다
'NaN을 0으로 대처하고 싶습니다.'에 답변달기
글쓴이 정보: