구간 간격이 일정하지 않은 히스토그램 생성

게시판 IDL Q&A 구간 간격이 일정하지 않은 히스토그램 생성

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #3113 Reply
      S.H.Ahn
      회원

      안녕하세요,

      바람장미(풍향에 따른 풍속의 빈도)를 idl로 표출하는 도중에 질문이 있어서 글 올립니다.

      코드는 cgWindRose 코요테 프로그램을 이용하였는데요,

      이 프로그램을 간단하게 설명하면, 풍속을 일정 간격으로(5 m/s, 10 m/s 등) 나누고 풍향을 여러 방위로(8방위, 16방위 등) 나누어서

      입력된 풍향, 풍속 데이터가 각 방위 그리고 각 풍속별로 몇 퍼센트인가를 계산하여 그림으로 표출하는 프로그램입니다.

      그런데 해당 프로그램에서 사용되는 펑션인 Hist_nd는 풍속 구간을 일정하게 나누도록 계산됩니다.

      예를들어 5m/s씩 나눈다고 하면 0-5, 5-10 , 10-15, 15-20, 20 m/s 이상, 이런식으로 구간이 생성되는데

      저는 0-0.3, 0.3-3.3, 3.3-7.9, 7.9-13.8, 13.8 이상

      이렇게 일정하지 않은 5개의 구간을 설정하여 풍향별 빈도를 알아내야하는 상황입니다.

      위에 첨부한 Hist_nd 코드에서 h 부분을 수정해야 할 것 같은데요

      for i=s[0]-2,0,-1 do h=nbins[i]*temporary(h) + long((V[i,*]-mn[i])/bs[i])

      이 부분에 bs (binsize)가 스칼라로 고정이 되어있어서

      어떤식으로 일정하지 않게 구간을 조정할 수 있는지 아이디어를 얻고싶습니다.

      아이디어가 있으신분은 공유해주시면 정말 감사하겠습니다.

    • #3114 Reply
      Sangwoo
      회원

      HIST_ND는 IDL이 자체적으로 갖고 있는 함수는 아니고 Coyote 라이브러리를 설치해야 쓸 수 있는 외부 기능입니다. 저는 개인적으로 HIST_ND를 사용해본 적이 없지만, 내용을 좀 확인해본 결과 IDL에 내장된 HIST_2D 함수의 N 차원 버전이라고 보면 될 것 같습니다. 그런데 IDL에서 사용되는 빈도분포 관련 함수들은 대개의 경우 그것이 내장 루틴이든 외부 루틴이든 간에 모두 등간격 bin들을 전제로 합니다. 따라서 만약 부등간격 bin에도 대응되도록 하려면 코드 자체의 세부 내용을 상당 부분 뜯어고치거나 아니면 유저가 직접 만드는 수 밖에 없는데, 사실 이것은 상당히 번거로운 작업일 것 같습니다. 그래서 아이디어만 생각해보면, 부등간격 bin들을 고려한다고 했을 때 가장 잘게 쪼갤 수 있는 최소 크기의 등간격을 가정하여 이 기준으로 결과를 얻은 후, 중간중간의 bin들을 서로 합치는 방식이 어떨까 합니다. 위에서 알려주신 간격들의 경우라면 0.1을 간격으로 하여 결과를 먼저 얻는 방식입니다. 구간이 0-0.3, 0.3-3.3, 3.3-7.9, 7.9-13.8, 13.8 이상인 경우 그냥 IDL 자체에 내장된 HISTOGRAM 함수를 사용하는 예를 들어 본다면 과정은 대략 다음과 같습니다. 데이터 값들로 구성된 배열을 data라고 가정합니다.

      h = HISTOGRAM(data, MIN=0, MAX=13.8, BINSIZE=0.1)

      이렇게 하면 h는 총 139개의 값들로 구성됩니다. 세부 구간들이 0~0.1, 0.1~0.2, …., 13.7~13.8, 13.8~13.9와 같은 방식으로 나눠지기 때문입니다. 그러면 이렇게 결과를 얻은 후 만약 0~0.3 구간의 결과가 필요하다면 다음과 같이 배열의 부분합을 구하면 됩니다.

      h1 = TOTAL(h[0:2]) ; 0~0.3 구간
      h2 = TOTAL(h[3:32]) ; 0.3~3.3 구간

      유사한 방식을 HIST_2D를 사용할 경우에 적용한다면 아마 다음과 같은 방식이 될 것 같습니다.

      h1 = TOTAL(h[0:2, 0:2]) ; 0~0.3 구간
      h2 = TOTAL(h[3:32, 3:32]) ; 0.3~3.3 구간

      그리고 HIST_ND의 경우라면 차원만 더 확장된다고 보면 되겠지요. 이 아이디어가 맞을지는 모르겠으나 어쨌든 이와 유사한 방식을 적용해 보시면 어떨까 합니다.

    • #3115 Reply
      S.H.Ahn
      회원

      코드 수정으로는 역시 어렵군요…

      어쨌든 감사합니다~ ^^

      할 수 있는 범위안에서 최선의 방법인 것 같습니다.

      수고하세요.

2 답변 글타래를 보이고 있습니다
'구간 간격이 일정하지 않은 히스토그램 생성'에 답변달기
글쓴이 정보: