Jonghyuk

게시판 답변이 생성됐습니다

15 글 보임 - 31 에서 45 까지 (총 174 중에서)
  • 글쓴이
  • 답변: 배열 줄이기가 될까요 #2295
    Jonghyuk
    회원

    ok=where(temp ne 999)
    good_temp=temp[ok]

    Jonghyuk
    회원

    앞에 답변 드린 내용과 같은 문제인 것 같습니다.

    If를 55번 사용하는 것도 문제를 해결할 수는 있을 것 같습니다.
    하지만 앞에 답변 드렸듯이 1번은 Ethane, 2번은 Ethylene 등의 정의가 이미 되어 있으므로,
    1차원 배열을 하나로 합쳐 2차원 배열을 만들고, Ethylene 인 경우 2번이 나오게 where를 만들어,
    2차원 배열에서 V2를 찾아내는 것이 좋겠습니다.

    Execute() 라는 함수를 이용하면, where의 리턴값을 변수명으로 합칠 수도 있는데, 권장할만한 방법은 아니라고 생각합니다.

    답변: while 관련해서 질문 드립니다. #2277
    Jonghyuk
    회원

    SPC가 Ethane 이면 v1을, Ethylene 이면 v2를 … 이런 식으로 선택하시겠다는 말씀이신가요?
    만일 그렇다면,
    V=[[v1], [v2], [v3], [v4]…] 와 같이 합쳐 놓고,
    WHERE로 나오는 숫자에 따라,
    V[*, 0]
    V[*, 1]
    V[*, 2]

    로 처리하는 것이 좋을 것 같습니다.

    아니면 이런 경우는 READCOL 보다도 배열 전체를 2차원 배열로 한판에 읽는 것이 좋을 수도 있겠습니다.

    답변: hdf 영상 작업 문의드립니다. #2276
    Jonghyuk
    회원

    기본적으로 영상의 어떤 값을 화면상에 색으로 표시할 때 가장 만만한 컬러테이블이 흑백(Gray Scale) 입니다.
    Color Table을 적용하면 색을 입혀 볼 수는 있는데, hdf 자체에서 제공하는 또는 데이터 배포처에서 표준으로 여기는 Color Table이 어떤 것인지 모르겠습니다.

    원하는 영역을 자르는 것은 물론 가능합니다. ENVI의 Toolbox에서 Raster Management / Resize Data 로 들어가 영상을 선택하면 Spatial Subset을 선택할 수 있습니다. 여기에서 픽셀좌표를 알고 있다면 좌표로 잘라낼 수도 있고, image 버튼을 눌러서 영상을 보며 잘라낼 수도 있습니다.

    위경도 값은, HDF 영상의 투영법 정의가 어떻게 되어 있는지 알 수 있다면, Header에 Map 정보를 넣어 줄 수가 있을 것 같습니다.

    답변: grib1 자료 읽는 방법 #2274
    Jonghyuk
    회원

    말씀하신 링크에 소개된 대로, 현재 IDL에서는 GRIB을 자체 라이브러리로 해결하고 있습니다.
    자체 라이브러리라는 것이 ECMWF의 Grib 라이브러리(아마도 C로 되어 있는)를 IDL에 포팅해 놓은 것입니다. 그러므로 별도의 다운로드 없이 IDL에서 GRIB 파일을 읽고 쓸 수 있습니다.
    예전 WGRIB에 기반한 GRIB Reader도 이제 별도로 필요하지 않게 되었습니다(이때와 문법은 조금 달라졌습니다).

    IDL 8.2.3이면 기억이 정확하지는 않은데, Linux와 Mac에서만 GRIB 라이브러리를 사용할 수 있을 것입니다.
    IDL 8.3부터는 Windows에서도 GRIB을 사용할 수 있게 되었습니다. 현재 IDL 8.4버전에서는 물론 Windows를 포함한 Mac과 Linux에서 GRIB을 똑같이 사용할 수 있습니다.

    그런데, IDL에서 기본 제공하는 GRIB 인터페이스는 GRIB의 모든 것을 세세히 터치할 수 있는 루틴들입니다. 그러다 보니, 모든 일을 할 수는 있지만, 간단한 일을 하려고 할 때 번거로운 면도 있습니다.

    그래서, Mark Piper라는 전직 ExelisVIS의 Tech Director가 GRIB Helper Routines를 만들었습니다. 이는 내부적으로는 IDL 자체 GRIB 라이브러리를 사용하지만, 겉으로 보기에는 네다섯개의 루틴으로 GRIB의 읽기를 처리할 수 있게 해 놓은 것입니다. 다운로드를 받으라고 말씀드린 것은 이 GRIB Helper Routines입니다.

    아래 링크를 보시면 GRIB Helper Routines에 대한 간단한 소개가 있습니다.
    http://www.exelisvis.com/Company/PressRoom/Blogs/IDLDataPointDetail/TabId/902/ArtMID/2926/ArticleID/12914/GRIB-helper-routines.aspx

    아래 링크를 보시면 GRIB Helper Routines를 이용한 예제가 소개되어 있습니다.
    http://www.exelisvis.com/Company/PressRoom/Blogs/IDLDataPointDetail/TabId/902/ArtMID/2926/ArticleID/12931/An-example-of-using-the-GRIB-helper-routines.aspx

    • 이 답변은 Jonghyuk에 의해 9 years, 3 months 전에 수정됐습니다.
    Jonghyuk
    회원

    readcol로 데이터는 잘 읽으신 상황이라고 생각됩니다. 즉, Date 변수에는 ‘20130101’ 같은 문자열이 들어 있고, time에는 시간에 해당하는 정수, e 변수에는 5.6, 7.9 같은 어떤 측정값 같은 것이 들어 있겠지요.

    언제부터 언제까지의 일평균을 낼 것인지 결정이 되시면,

    t=timegen(start=julday(1, 1, 2013), final=julday(12, 31, 2014), unit=’day’)
    t_str=string(t, format='(C(CYI04CMOI02CDI02))’)
    와 같이 처리하면, t_str 변수에는 매일 날짜의 YYYYMMDD 문자열 배열이 들어갑니다.

    julday() 함수의 순서는 월, 일, 년 입니다. 그러므로 지정하시고자 하는 월, 일, 년을 시작과 종료날로 지정해 주시면 됩니다.

    for i=0, n_elements(t)-1 do begin
    ok=where(date eq t_str[i], ct)
    print, t_str[i], mean(e[ok])
    endfor

    로 매일 날짜에 대해 연월일 문자열이 매칭되는 행을 찾고(where 함수), 해당 행의 e 값들 즉, e[ok] 에 대한 평균을 내면 될 것 같습니다.

    답변: 불규칙한 데이터 읽기 #2229
    Jonghyuk
    회원

    구분자도 없고 중간이 비어있는 칸도 있다면, 방법은 딱 하나 뿐입니다. format 키워드를 사용하는 것이고, 그렇단 얘기는 최소한 열은 딱딱 맞아 있어야 된다는 것입니다. (그렇지 않다면 어디까지가 한 칸이고, 이 칸이 비어 있는 것인지 아닌지 판정할 방법이 없을 것입니다).

    IDL> str=’*1*1*1***1***1*1′
    IDL> a=intarr(8)
    IDL> reads, str, a, format='(8I2)’
    IDL> print, a
    1 1 1 0 1 0 1 1
    IDL>

    위 예에서 str 의 *는 공백(space)으로 바꾸어 주어야 실행이 됩니다.
    띄어쓰기를 포함한 2칸이 숫자 하나가 들어가는 자리인데, 4번째 값이 없고, 6번째 값이 없는 상태입니다. 한줄에 총 8개의 값이 있는 상황이라고 하겠습니다.
    이러한 문자열을 읽을 때, a=intarr(8) 과 같이 8개의 정수를 읽을 공간을 마련해 놓고, format 키워드를 이용하여 “여덟개의 두자리 정수를 읽겠다”고 선언을 하면, 빈 칸은 0으로 처리됩니다.

    파일에서 읽을 때 readf 로 직접 format 키워드를 이용해도 되고, 파일에서 한줄씩 문자열을 읽어 이 문자열을 reads 로 재해석 하는 두가지 방법이 모두 가능합니다.

    답변: 불규칙한 데이터 읽기 #2216
    Jonghyuk
    회원

    4열 N 행으로 읽으려고 하시는 것인가요?
    이런 경우 빈칸 (예를 들어 두번째 줄의 3열, 4열) 은 어떤 값으로 채울 계획이신지요?
    아니면 그냥 첫줄은 데이터 4개, 둘째 줄은 데이터 2개 이런식으로 다른 크기로 관리하실 계획이신지요?
    불규칙 데이터이므로 어떤 정해진 답은 없고, 위의 내용에 따라 갈 길이 좀 달라집니다.

    Jonghyuk
    회원

    아마도 다음 블로그를 보신 것으로 생각됩니다.
    http://blog.daum.net/_blog/BlogTypeView.do?blogid=0SAbs&articleno=276&categoryId=0&regdt=20141027151727

    일단, 저는 여기에 나오는 가이드 대로(맨 아래 세줄) 하여 IDL 8.2, 8.3, 8.4를 잘 실행할 수 있었습니다.
    처음에 요세미티 업그레이드 후에 IDL이 X-Window가 없다고 안되어서 XQuartz 2.7.7 새로 설치했더니 8.3과 8.4는 아무 문제 없이 실행이 되었고,
    8.2의 경우에는 실행을 했더니 아래와 같은 에러메시지가 나와서 이상우 박사님 블로그에 제시된 파일(/Applications/exelis/idl82/bin/bin.darwin.x86_64/libz.1.dylib)을 다른 이름으로 바꾸어 버렸더니(지우긴 웬지 찜찜해서요), 그 이후 실행에 문제가 없었습니다.

    yi@bin>/Applications/exelis/idl82/bin/idl
    dyld: Symbol not found: _inflateReset2
    Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
    Expected in: /Applications/exelis/idl82/bin/bin.darwin.x86_64/libz.1.dylib
    in /System/Library/Frameworks/ImageIO.framework/Versions/A/Resources/libPng.dylib
    Trace/BPT trap: 5

    현재 실행시에 문제(에러메시지)가 어떤 형태인지 모르겠습니다. 질문하신 내용으로 보았을 때 현재 저와의 차이일 수 있는 점은, 저는 IDL8.3, IDL8.4가 설치된 상태에서 IDL8.2를 실행하는 것이고, 질문하신 분의 시스템은 IDL 8.2 단독 설치라는 차이는 있을 것 같은데요, 사실 IDL은 버전별로 서로 간섭을 하지 않기 때문에 이 역시 문제가 되지는 않을 거라는 추측이 됩니다.

    답변: 파일 읽기 관련 질문 #2186
    Jonghyuk
    회원

    1. /PRESERVE_NULL 키워드가 도움이 되지 않을까 생각합니다. 열과 열을 구분하는 것이 콤마 등으로 명확하다면 이 키워드가 유용하게 사용됩니다.
    2. 앞의 세열만 읽으실 거라면, format=’A,D,D’ 까지만 써 주셔도 됩니다. 뒤쪽으로 사용하지 않는 X는 굳이 필요하지 않습니다.

    SKIP 하는 행들을 리포팅할텐데, 그 행을 찾아 보시면 뭔가 건너뛰는 이유가 있지 않을까 생각됩니다. 제 추정은 1번과 관련이 있는 것 같습니다. 만일 단순 띄어쓰기로 된 파일이라면, 값이 없는 부분은 READCOL로 처리하기 어렵습니다. 어디까지가 한 컬럼이냐를 결정할 방법이 없기 때문입니다.

    답변: image함수 질문 #2185
    Jonghyuk
    회원

    버그는 아닐 것 같고, 의도한 것은 더더욱 아닐 것 같습니다.
    그냥 Image 함수가 LOG AXIS를 지원하지 않는 것 같네요.
    해결책(contour + /FILL) 까지 이미 제시하신 질문이네요. 감사합니다.

    답변: OSX10.10에서 IDL 실행 불가 문제 #2134
    Jonghyuk
    회원

    sando님 잘 되신다니 다행입니다. 저는 수습 못하거든요. ㅎㅎ.

    답변: multi plot 방법 질문입니다. #2127
    Jonghyuk
    회원

    http://www.exelisvis.com/docs/MultiViz.html

    위 링크를 보시면 몇 가지 방법이 소개되어 있습니다.
    POSITION을 쓰는 것이 궁극적으로는 가장 자유로운 방법(원하는 위치에 원하는 크기로)이고,
    LAYOUT을 쓰는 것이 규칙적인 크기의 멀티플롯에는 가장 편한 방법이 될 것 같습니다.
    예를 들어, LAYOUT=[3, 4, 1] 이라고 하면 3*4개 즉 12개의 플롯을 배치할 때, 그중 첫번째(왼쪽 상단)에 해당하는 위치에 그려라… 하는 의미입니다.

    답변: OSX10.10에서 IDL 실행 불가 문제 #2126
    Jonghyuk
    회원

    저는 요세미티 업그레이드 해도, IDL 8.3 쓰는 데는 지장이 없었습니다.
    IDL 8.3은 원래 깔려 있던 거 그대로 쓰고 있습니다.

    답변: !p.multi를 이용하여 지도 그리기 #2035
    Jonghyuk
    회원

    POSITION 키워드는 다른 모든 설정을 이깁니다. 무슨 일이 있어도 POSITION이 지정한 자리에 그림을 그립니다.
    올려주신 코드에서는 세번의 MAP_SET이 모두 같은 POSITION을 지정하고 있습니다. 당연히 세 그림이 한곳에 그려지며, 이는 MAP_SET이 아닌 PLOT 등을 실행해도 문제가 됩니다. !p.multi 설정을 따르도록 하려면 POSITION 키워드를 지우세요.
    만일 !p.multi 설정대로 한 것이 마음에 들지 않는다면, 세 그림의 POSITION을 모두 다르게 해서(직접 지정해서) 그리는 방법도 있습니다.

15 글 보임 - 31 에서 45 까지 (총 174 중에서)