- This topic has 3개 답변, 2명 참여, and was last updated 10 years, 10 months 전에 by Jonghyuk.
-
글쓴이글
-
-
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=1oplot, kdp, kdp_fit, thick=3, color=50
-
Jonghyuk회원
데이터를 읽는 데는 문제가 없으셨는지요?
어떤 방식으로 데이터를 읽으셨는지 모르겠습니다. 문자열로 읽어서 다시 숫자로 변환한 것인지…어쨌든 이런 상황에서 WHERE() 함수를 쓰는 것이 답일 것 같습니다. 상황을 정확히 모르겠으나,
ok=where(finite(kd))
c=regress(kdp[ok], kd_5[ok])
와 같이 kd가 NaN이 아닌 것만 추려서 계산을 하고 플롯도 이와 같이 하시면 됩니다.
그런데, NaN이 IDL이 인식하는 NaN으로 읽으신 것인지 문자열 NaN의 상태인지(그렇다면 다른 숫자도 사실상 문자열로 읽으신 것인지) 상황은 잘 모르겠습니다만 개요는 Where() 함수로 NaN이 아닌 행을 찾아서 그 행의 데이터만 사용하는 것입니다. -
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도 되게 되는건가요? -
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)
-
-
글쓴이글