태그: combination, 인덱싱, 조합
- This topic has 2개 답변, 3명 참여, and was last updated 9 years, 6 months 전에 by tlseorb0111.
-
글쓴이글
-
-
안녕하세요 ~
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] .. …
이런식으로 되겠지요? 제가 고민을 해보긴 했는데 쉽지가 않아서 고수님들께 도움을 요청하고자 합니다.
혹시 알고계신 내용이 있으면 도움 부탁드립니다. -
Sangwoo회원
사실 그런 역할을 하는 IDL 내장 루틴은 제가 알기로는 없습니다. 그냥 직접 프로그램을 만들어야 할 것으로 보이네요. 다중 루프 방식을 사용하면 가능할 것 같습니다.
-
파일을 어떻게 올리는지 몰라 코드를 써놓겠습니다.
예전에 인터넷에서 찾은것인데 출처가 기억이 나질 않네요.example
3개중 2개
res = combigen(3, 2)
print, res
0 0 1
1 2 2FUNCTION 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]]]
ENDELSEpossible_prev = possible_next[good]
ENDFORRETURN, result
END
- 이 답변은 tlseorb0111에 의해 9 years, 6 months 전에 수정됐습니다.
-
-
글쓴이글