colocation 방법

게시판 IDL Q&A colocation 방법

1 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #592 Reply
      choimb2001
      회원

      안녕하세요, IDL을 접한지 얼마 안된 초보입니다.

      제가 어쭙고 싶은것은

      두개의 배열 a와 b가 있을 때에
      a와 b의 data 구조는 [lat, lon, dat]로 동일합니다.
      그러나 a는 250*251, b는 1000*1004 로 배열이 다를 때에
      a의 lat, lon에 위치하는 dat를
      a와 일치하는 b의 lat, lon 값을 갖는곳의 dat로 바꾸고자 합니다.

      readcol, file1, format = ‘f,f,f’, lat1, lon1, dat1 ;a배열
      readcol, file2, format = ‘f,f,f’, lat2, lon2, dat2 ;b배열

      For i = 0L, 250L*251L-1L do begin
      For i_1 = 0L, 1000L*1004L-1L do begin
      IF lat1(i) eq lat2(i_1) and lon1(i) eq lon2(i_1) then begin
      dat2(i) = dat1(i)
      endif
      endfor
      endfor

      이러한 식으로 구현을 했는데 속도가 너무 느려서..
      혹시나 배열의 크기가 다른 두 배열중에 lat lon 값이 같은 곳의 b의 dat를 a의 dat로 바꾸는 또 다른 방법을 혹시 알고 계신가요?
      알고 계시면 알려주세요..

    • #607 Reply
      Jonghyuk
      회원

      올려 주신 코드대로 한다면 처리 시간이 많이 걸릴 것 같습니다. 최악의 경우에는 정말 이렇게 해야 하는 경우가 있을 수도 있습니다.
      좌표에 어떤 규칙이 있지는 않을까요? a 배열과 b 배열의 같은 위경도 위치가 a와 b의 index에 대한 함수로 구해질 수 있는 경우 같은 거죠. 이런 규칙이 존재한다면 가장 빠를 것입니다. 250*251과 1000*1004가 각각 4*4배인 것으로 이렇게 할 수 있지 않을까 하는 희망이 보입니다(올려 주신 내용만으로는 확인이 안됩니다만, 배열의 크기는 매우 희망적으로 보입니다).

      그렇지 않다면 어떤 순서로 하든 두 배열을 어떤 기준에 맞추어 소팅을 한번 하는 것이 좋겠습니다. 경도순으로 소팅하고 같은 경도라면 위도순으로 소팅하는 것이 그 예가 될 것 같습니다. 그렇게 해서 sort_a와 sort_b를 한번 구축해 놓으면 sort_a[0]을 sort_b에서 찾고나서(그 때 인덱스를 k라고 하면) sort_a[1]을 찾을 때는 k+1번부터 검색을 하면 됩니다. 이렇게 나간다면 sort_a 변수와 sort_b 변수를 한번씩만 훑으면 됩니다.

1 답변 글타래를 보이고 있습니다
'colocation 방법'에 답변달기
글쓴이 정보: