이름이 다른 변수를 합치는 법

게시판 IDL Q&A 이름이 다른 변수를 합치는 법

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

      안녕하세요.

      현재 IDL multiprocessing을 연습하고 있는 학생입니다.

      지금 split_for라는 스크립트를 이용하여 병렬계산을 시도해 보고 있는데 output이 다른 변수명으로 나옵니다.

      예를 들면 mm (=fltarr[1000])을 10개의 core로 계산을 한다고 하면 split_for의 결과는

      mm0, mm1, mm2, … mm9

      이런식으로 각 코어의 계산결과가 다른 변수명으로 출력이 됩니다.

      저는 이 변수를 모두 합친 mm=[mm0, mm1, …, mm9]라는 결과를 자동으로 만드는 스크립트를 짜고 싶은데요.

      정리하자면, 변수명 자체가 어떤 순열처럼 규칙적으로 변화할 때 이를 합칠 수 있는 코드에 대한 조언을 구하고 싶습니다. 예를들면, xx_0, xx_1, … , xx_N 의 변수들이 있을 때 xx=[xx_0, xx_1, …, xx_N]을 출력해주는 코드입니다.

      감사합니다.

    • #5186 Reply
      mwkim
      회원

      올려주신 내용에 대해 정확한 답변이 될 지는 모르겠는데,

      일단 파악한 바로는 병렬 처리를 통해 다수의 변수가 생성된 것을 하나의 변수로 합치는 방법에 대해 문의하신 것 같습니다.

      해당 부분은 올려주신 것과 같이

      xx=[xx_0, xx_1, …, xx_N]

      와 같이 처리가 가능할텐데 문제는 이 xx 변수 개수에 변동이 생기면 매번 명령어를 다시 작성해야 한다는 것 같습니다.

      일단 원래 변수 명과 개수만 알면 위와 같은 명령어는 만드실 수 있을 것 같은데, 만들어진 명령어는

      EXECUTE 명령어를 통해서 실행이 가능합니다.

      void = EXECTUE(‘xx=[xx_0, xx_1, …, xx_N]’)

      그 외 EXECUTE 명령어에 대한 부분은 IDL 도움말을 참조하시면 될 것 같습니다.

      정리하면 다음과 같을 것 같습니다.

      baseName = ‘xx’ ; 원래 변수명
      cmd = baseName + “=[”
      FOR i = 0, num – 1 DO BEGIN ; num = 병렬화 개수
      varName = baseName + STRING(i) ; i를 문자열로 변환 시 split_for에서 만들어주는 규칙에 따라 FORMAT을 정의해 주어야 합니다.
      cmd += varName
      IF i NE num – 1 THEN cmd += ‘,’
      ENDFOR
      cmd += ‘]’
      void = EXECUTE(cmd)

1 답변 글타래를 보이고 있습니다
'이름이 다른 변수를 합치는 법'에 답변달기
글쓴이 정보: