data를 행렬에 입력시킬 때 질문있습니다.

게시판 IDL Q&A data를 행렬에 입력시킬 때 질문있습니다.

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

  • 글쓴이
  • #5327

    shyang
    회원

    안녕하세요!

    아래와 같이 IDL을 이용하여 NCDF 파일을 읽고 있습니다.
    다름이 아니라 맨 아래 부분에서 각 I값마다의 21개 data가 I행에 들어가도록 하고 싶습니다.
    그런데 아래와 같이 실행을 시키면 0~28행까지의 21개씩인 data값은 모두 0이 되고 마지막행에만 제대로 된 data가 들어가게 됩니다..
    1행부터 29행까지 모든 21개씩의 data가 들어가게 하려면 어떻게 수정을 해야하는지 알 수 있을까요?

    • 이 게시글은  shyang에 의해 1 주, 1 일 전에 수정됐습니다.
  • #5329

    Sangwoo
    회원

    하단에서 real_data[*, i]과 같은 내용이 있다는 것은 real_data는 2차원 배열이라는 의미인데, 막상 그 윗 부분에서는 real_data가 FLTARR(21)로 1차원 배열의 형태로 정의되어 있습니다. 이렇게 되면 당연히 가장 마지막 대입 과정만 반영될 수 밖에 없습니다. 배열 real_data가 2차원으로 정의되도록 하는 것이 가장 먼저 시급해 보입니다.

    • #5331

      shyang
      회원

      말씀하신대로 21,1인 2차원 배열로 변경하였습니다.
      그러나 결과가 여전히 마지막행에만 데이터가 들어가고 있습니다….
      real_data[*,i] 부분이 잘못된걸까요..?

  • #5330

    shyang
    회원

    .

    • 이 답변은  shyang에 의해 1 주, 1 일 전에 수정됐습니다.
  • #5333

    Sangwoo
    회원

    최종적으로 21×29의 형태를 갖는 real_data라는 배열을 얻고자 하시는 것인지 궁금합니다. 일단 현 상태를 보면 real_data라는 배열이 i 반복문 내에서 1차원 배열로 정의되고 있습니다. 그러면 반복의 매 회차마다 새로 정의되기 때문에, 이전 회차에서의 내용은 아예 지워지게 됩니다. 결국 지금의 상태는 1차원 배열을 매번 지우고 다시 만들고 하는 과정의 반복인 셈입니다. 그렇기 때문에 마지막 회차 때의 결과만 얻게 되는 것입니다.

    이러한 문제를 해결하고자 한다면, 반복문을 시작하기 전 앞부분 어딘가에서 real_data를 FLTARR(21, 29)로 2차원 배열의 형태로 일단 정의해두고, 반복문 내에서 real_data[*, i]에 real_leveldata를 대입하는 방식으로 가야 합니다. 그리고 level_data, real_leveldata 배열들은 원래대로 그냥 FLTARR(21)로 1차원으로 정의되면 됩니다. 어차피 굳이 21×1의 형태로 정의할 필요는 없습니다. 결국은 최종적으로 얻고자 하는 결과물이라 할 수 있는 real_data 배열의 형태가 가장 중요해 보입니다. 전반적으로 대략 다음과 같은 형태의 내용이 되면 될 것 같습니다.

    real_data = FLTARR(21, 29)
    FOR i=~~~ DO BEGIN
    ~~~~~
    ~~~~~
    FOR j=~~~ DO BEGIN
    ~~~~~
    ~~~~~
    ENDFOR
    ~~~~~
    ~~~~~
    level_data = FLTARR(21)
    FOR a=~~~ DO BEGIN
    ~~~~~
    ~~~~~
    real_leveldata = ~~~~~
    ENDFOR
    real_data[*, i] = ~~~~~
    ENDFOR
    HELP, real_data
    ~~~~~
    END

    • 이 답변은  Sangwoo에 의해 1 주 전에 수정됐습니다.
    • 이 답변은  Sangwoo에 의해 1 주 전에 수정됐습니다.
    • #5336

      shyang
      회원

      앗 성공했습니다!!!!!!! 위치를 FOR구문 밖으로 내보내야했었군요 너무 감사해요ㅠ_ㅠ!!

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