게시판 답변이 생성됐습니다
-
글쓴이글
-
jsh4887회원
답변 감사합니다~
일단 헤더부분에 대해서는 현재 처리를 한 상태이구요
이건 좀 다른 질문이긴 한데
혹시 저 위의 데이터
13 6 16 2 1 30.0000000 0 8G14G22G31G32G29G25G12G24
76.9524 0 L1L2C1P2 11.18 207.92
99.7028 0 L1L2C1P2 76.72 210.32
79.7613 0 L1L2C1P2 45.95 290.19
101.0117 0 L1L2C1P2 70.14 309.43
102.8105 0 L1L2C1P2 59.85 141.03
102.8003 0 L1L2C1P2 18.89 59.01
82.8734 0 L1L2C1P2 58.20 50.18이 부분을
76.9524 0 11.18 207.92 G14 2 1 30.0000000
99.7028 0 76.72 210.32 G22 2 1 30.0000000
79.7613 0 45.95 290.19 G31 2 1 30.0000000
101.0117 0 70.14 309.43 G32 2 1 30.0000000
102.8105 0 59.85 141.03 G29 2 1 30.0000000
102.8003 0 18.89 59.01 G12 2 1 30.0000000
82.8734 0 58.20 50.18 G24 2 1 30.0000000이런식으로 바꿀수 있을까요? L1L2C1P2 없애는 부분까지는 했고 8G14G22G31G32G29G25G12G24이 부분도 strsplit을 통해서 쪼개는 것까지 하였는데 저와 같은 형식으로 만들지는 못하겠더라구요..
저게 8G14G22G31G32G29G25G12G24이 부분에서 제일 앞의 숫자인 8이 한 시간안의 데이터 수를 나타내는데 1200개 가량되는 데이터 중에 한 시간 안에 8개의 데이터가 있을 수도 있고 10개의 데이터가 있을 수도 있고 이런 식으로 불규칙적이여서 어찌해야할지 잘 모르겠습니다ㅜㅜ
많으 도움 주시길 바랍니다..ㅜㅜ
jsh4887회원제가 실험을 좀 해봤는데요..
저기 index를 안쓰니깐 값이 똑같이 나오더라구요..
즉.. 제가 임의로 정해놓은 지역 내에서만 interpolation을 하고 싶었는데..
그래서 그 지역을 지정하기 위해 inside란 함수를 썼는데 저 함수를 안쓰고 trigrid를 쓰니 값이 똑같이 나오더라구요..
저게 961개의 1차원 배열에서 inside를 쓸 경우 나머지는 nan이 되고 96개정도만 남아서 혹시 data가 너무 적어서 interpolation 되는 과정에서 값이 변한게 아닌가 싶은데요..
제가 하는 방법이 틀린건가요.. 아님 코드가 틀린건가요..
jsh4887회원일단 제가 짠 코드을 올려드리겠습니다.
i = 0
path = ‘C:\Users\SSL\Desktop\Student\Nick’
readcol, path+’\CIT data\’+year[i]+’_dTEC_CIT_’+doy[i]+’_’+ut[i]+’UT_before30min_after30min.txt’,$
format='(f,f,f)’,lon_cit,lat_cit,dtec_cit, /silent, skipline=1위와 같이 readcol을 통해 data를 불러왔구요..
data형식은
lon_cit lat_cit dtec_cit
120 20 0.1
120 21 0.5
120 22 0.3이런식으로 해서 961개의 값들로 이루어진 data입니다.
lat = indgen(301)/float(10) + float(20)
lon = indgen(301)/float(10) + float(120)lonx = [128,138,140,146,142,130,128]
laty = [34,38,46,44,35,31,34]lat_interpol = fltarr(float(301)*float(301))
lon_interpol = fltarr(float(301)*float(301))for ii = 0, 300 do begin
for jj =0, 300 do begin
lon_interpol[float(301)*ii+jj] = 120 + 0.1* ii
lat_interpol[float(301)*ii+jj] = 20 + 0.1* jj
endfor
endforindex = where( inside(lon_cit, lat_cit, lonx, laty) eq 0 )
dtec_cit_div = dtec_cit/10
dtec_cit_div[index] = !Values.F_nanTRIANGULATE, lon_cit, lat_cit, tr
grid = trigrid(lon_cit, lat_cit, dtec_cit_div, tr, [0.1,0.1], [120,20,150,50])new_data = fltarr(3,float(301)*float(301))
new_data[0,*] = lon_interpol
new_data[1,*] = lat_interpol
new_data[2,*] = gridend
위와 같이 코드를 짯는데요.. 저는 data값이 많이 다르게 나옵니다.
현재 다르게 보이는 점은 저는 1차원 배열을 썻을뿐이고.. 작성해주신분은 2차원배열을 썻다는 것밖에 다른점을 못느끼겠습니다.. 혹시 제가 코드를 잘못짠것인가요..?jsh4887회원답변 감사합니다~
근데 또 한가지 문제가 생겨 글을 남기게 되었습니다.
위와 같이 코드를 짰는데요..
혹시 trigrid를 쓰면서 데이터 값이 변형될수도 있는건가요?
그러니깐 원래 1도간격의 데이터가 0.1도로 바뀌면서 1도에 위치한 데이터의 값은 바뀌면 안되는거잖아요..
근데 제가 짠 코드는 데이터값도 바뀌고.. 심지어 사라지고 nan값이 위치한 곳에 데이터값이 나오기도 합니다..
lon_cit = float(961)을 가진 데이터구요 나머지 lat_cit와 dtec_cit_div 모두 같은 값을 가지고 있습니다.
그래서 혹시 nan값을 가지고 있어서 그런가 싶어 계산을 해보았으나.. 갯수만 다르게 나올뿐 값은 모두 똑같이 나오더라구요..
왜 그런것일까요..
제가 짠 코드입니다.
index = where( inside(lon_cit, lat_cit, lonx, laty) eq 0 ) ; 이 영역을 만들어서 영역 안의 포인트들을 제외하고 나머지는 nan을 만들어서 trigrid를 진행하였습니다.
TRIANGULATE, lon_cit, lat_cit, tr
grid = trigrid(lon_cit, lat_cit, dtec_cit_div, tr, [0.1,0.1], [120,20,150,50])jsh4887회원말씀 안드린게 있는데.. contour 과정에서 cell_fill을 했을 때의 interpolation 기법을 알고 싶습니다..
-
글쓴이글