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

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

이 게시글은 1개 답변과 2명 참여가 있으며 마지막으로  mwkim에 의해 6 월, 2 주 전에 업데이트 됐습니다.

  • 글쓴이
  • #5185

    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

    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)

답변은 로그인 후 가능합니다.