IDL combination routine

게시판 IDL Q&A IDL combination routine

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2157 Reply
      boram3316
      회원

      안녕하세요 ~
      IDL로 프로그램을 작성중인 학생입니다ㅜ

      혹시 IDL에서 combination을 찾는 루틴이 있나요?..
      단순히 조합의 개수를 찾는 것이 아닌 인덱싱을 해야하는데 ..
      예를 들어서 (3, 2, 1) 이런 배열이 존재할 때 이들이 가질 수 있는 조합의 결과를 찾는 루틴입니다.
      결과는 [0,0,0], [0,0,1], [0,1,0], [0,1,1], [0,2,0], [0,2,1], [1,0,0] .. …
      이런식으로 되겠지요? 제가 고민을 해보긴 했는데 쉽지가 않아서 고수님들께 도움을 요청하고자 합니다.
      혹시 알고계신 내용이 있으면 도움 부탁드립니다.

    • #2158 Reply
      Sangwoo
      회원

      사실 그런 역할을 하는 IDL 내장 루틴은 제가 알기로는 없습니다. 그냥 직접 프로그램을 만들어야 할 것으로 보이네요. 다중 루프 방식을 사용하면 가능할 것 같습니다.

    • #2159 Reply
      tlseorb0111
      회원

      파일을 어떻게 올리는지 몰라 코드를 써놓겠습니다.
      예전에 인터넷에서 찾은것인데 출처가 기억이 나질 않네요.

      example
      3개중 2개
      res = combigen(3, 2)
      print, res
      0 0 1
      1 2 2

      FUNCTION COMBIGEN, n, k

      IF n LT 2 THEN MESSAGE, ‘N must be greater than 1.’
      IF k GT n THEN MESSAGE, ‘K must be less than or equal to N.’

      possible_prev = INDGEN(n)
      FOR vi=1l, k-1 DO BEGIN
      possible_next = INDGEN(n)
      ; only really possible when possible_next > possible_prev
      prevsize = SIZE(possible_prev, /dimen)
      possible_prev = REBIN(REFORM(possible_prev,1,prevsize), [n,prevsize], /sample)
      possible_next = REBIN(possible_next, [n,prevsize], /sample)
      good = WHERE(possible_next GT possible_prev, ngood)

      IF vi EQ 1 THEN BEGIN
      ; set up array that answers get stored in
      result = [[possible_prev[good]],[possible_next[good]]]
      ENDIF ELSE BEGIN
      ; add to result
      good_ai = ARRAY_INDICES(possible_prev, good)
      result = [[result[good_ai[1,*],*]], [possible_next[good]]]
      ENDELSE

      possible_prev = possible_next[good]
      ENDFOR

      RETURN, result

      END

      • 이 답변은 tlseorb0111에 의해 9 years, 5 months 전에 수정됐습니다.
2 답변 글타래를 보이고 있습니다
'IDL combination routine'에 답변달기
글쓴이 정보: