Jonghyuk

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

15 글 보임 - 136 에서 150 까지 (총 174 중에서)
  • 글쓴이
  • 답변: 비공개: 바이너리파일 읽을 때 #898
    Jonghyuk
    회원

    목적 자체가 T(0~15) 별로 저장하는 것이 아니라면, 현재 데이터 그 대로 ASSOC을 이용하여 필요한 T만 뽑아낼 수 있습니다. 물론 반복문을 통해 뽑아낸 내용을 T=0~15로 저장할 수도 있겠습니다.

    데이터 타입이 어떤 형태인지(Byte, Integer, UInteger, Float 등) 모르겠지만, Float 형이라고 가정하면,

    openr, 1, ‘filename.dat’
    data=assoc(1, fltarr(5120, 2560, 40))

    ;If you want t=0
    onedata=data[0]

    ;If you want t=13
    onedata=data[13]

    ;If you want t=10
    onedata=data[10]

    ;이 때 모든 onedata는 Float 형 배열 [5120, 2560, 40] 이 됩니다.
    ;작업 완료 후에는 파일을 닫아 주는 것이 좋습니다.
    close, 1

    이와 같이 바이너리 파일은 규격만 잘 잡아 주면 앞뒤로 자유롭게 이동하며 파일을 읽을 수 있습니다. ASSOC() 함수는 정형화된 데이터 덩어리를 읽을 때 마치 배열을 다루듯 쉽게 파일을 억세스할 수 있게 해주는 도구입니다. 그래서 바이너리 파일을 Random Access File이라고도 합니다. (물론 메모리에 이미 올라와 있는 배열만큼 빠르진 않습니다. HDD에서 억세스하는 것이니까요.). 하나의 t에 대해서라도 Float 형 데이터라면 2GB가 되겠네요. 큰 데이터네요.

    답변: 격자변환에 관한 질문입니다. #896
    Jonghyuk
    회원

    링크해 주신 글은 저도 읽어 보니, David Fanning 박사님 글 답지 않게 전개가 복잡하네요.

    원래 이 글의 내용은 위경도 자료로 된 데이터를 25km x 25km 의 북극 Polar Stereographic 자료로 변환하는 과정을 보여주기 위한 것입니다. 원하시는 작업과 반대인 것 같습니다.
    그렇지만, 맨 뒤쪽에 Faster Gridding 챕터를 보면, 본래 목적이 위경도 영상을 Polar Stereographic으로 변환하기 위한 작업임에도 불구하고, Polar Stereographic 의 x, y 좌표를 위경도로 바꾸는 과정이 나옵니다. 스마트하게 문제를 풀기위해서 좌표를 역으로 접근하다 보니 그렇게 하는 것인데, 이 부분이 도움이 되실 것 같습니다.
    David Fanning 박사님의 Coyote 라이브러리가 필요하고, cgScaleVector 함수는 현재 Scale_Vector 함수로 대체되었습니다. 이 부분은 수정하셔야 할 것 같습니다.

    답변: 격자변환에 관한 질문입니다. #890
    Jonghyuk
    회원

    25km x 25km 자료라는 것이 어떤 투영법으로 생성된 것인지요? 영상인가요?
    영상의 투영법 변환이라든지 좌표 변환은 ENVI에서 쉽게 처리할 수 있는 부분이라고 생각합니다.

    답변: Title 질문입니다. #889
    Jonghyuk
    회원

    창의 우측에 YTITLE 이 들어갈 공간이 없어서 나타나는 현상 아닐까 생각합니다.
    YTITLE을 그리긴 그리는데, 창 밖에다가 그리는 것 아닐까 하는… 추측입니다.

    다음과 같이 YTITLE이 들어갈 공간을 확보해 보십시오(XMARGIN 키워드 사용)

    IDL> plot, indgen(10), ystyle=8, xmargin=[7,7], ytitle=’hello’
    IDL> axis, /yaxis, ytitle=’Hi’, /save

    답변: ↓는 해결 되엇습니다. #888
    Jonghyuk
    회원

    진단이 잘 안되네요.

    1. print, fn 하여 원하시는 파일이 잘 찾아졌는지 확인해 보십시오.
    일반적으로 올려 주신 코드와 같이 단일 파일을 지정하는 경우(패턴으로 파일을
    찾는 경우가 아닌)는 file_search() 를 사용할 필요는 없습니다.
    fn=dir+’kj_WCD_0507_f’
    라고 쓰시는 것이 안전할 것 같습니다.

    2. 파일을 다른 디렉토리로 옮겨서 테스트 해보십시오. 해당 디렉토리에 접근 권한 문제인것 같기는 한데, 개인 계정이 접근권한 문제를 일으키는 경우는 매우 드물긴 합니다.

    3. 디렉토리 이름에 한글이 없도록하여 다른 디렉토리로 옮겨서 실행해 보십시오.

    답변: color bar에서… #879
    Jonghyuk
    회원

    ㅎㅎ, 이상우 박사님 장기인데,

    color_value=color_value>1<254

    와 같이 하시면 where 안쓰셔도 됩니다.

    blog.daum.net/swrush

    에 방문하셔서 asin에 관한 글을 보시면 도움이 될 것 같습니다.

    답변: 데이터 배열 정리 질문 #871
    Jonghyuk
    회원

    1. 1704개의 파일을 만들고자 하시는 건가요? 아니면 1704줄씩 끊어서 하나의 파일로 만들고자 하시는 건가요?
    2. 27064800과 27604800 이 혼재해 있는데 1704로 나누어 떨어지는 쪽이 27604800이므로 이쪽이 맞을 것 같습니다.
    3. 약 2만개의 데이터라는 언급이 있는데, 이는 어떤 쪽과 관련이 있는 것인지요?
    4. 데이터의 연산과정이 중간에 필요한 것인지, 아니면 단순히 파일만 나누어서 재배치하는 것이 목적인지에 따라 효율적인 방법이 조금 달라집니다.

    1704개의 파일을 만들고,
    3행의 헤더와 27604800행의 데이터행이 있는 것을 각 파일에 16200행씩 저장되도록 하는 것이라면,
    다음과 같은 코드를 생각해 볼 수 있을 것 같습니다.

    header=strarr(3)
    data=strarr(27604800)
    path = ‘/home/eunjee/seaice/HadISST_analysis/’
    file = ‘HadISST_sst_ice.dat’
    openr, lun, path+file,/get_lun
    readf, lun, header
    readf, lun, data
    free_lun, lun

    for i=0, 1703 do begin
    file=’data_’+string(i+1, format='(I04)’)+’.dat’
    openw, lun, path+file, /get_lun
    printf, lun, data[i:*:1704] ;i번부터 끝까지, 1704개씩 건너뛰며 뽑아낸 line을 씀
    free_lun, lun
    endfor

    end

    Jonghyuk
    회원

    strsplit()은 문자열 안에 원소와 원소를 구분할 수 있는 구분자(예를 들면, 공백이나 콤마 같은)가 있을 경우에 쓸모가 있습니다. 이와 같이 쭉 붙어 있는 문자열에서 자리수만 가지고 연월일시분을 구분하게 될 때는 strmid() 함수를 쓰는 것이 일반적입니다.

    time = ‘201312312359’

    yy=fix(strmid(time, 0, 4))
    mm=fix(strmid(time, 4, 2))
    dd=fix(strmid(time, 6, 2))
    hh=fix(strmid(time, 8, 2))
    mi=fix(strmid(time, 10, 2))

    strmid(문자열, 시작위치, 문자개수) 의 형식이므로 결과도 직관적입니다. 다만 strmid()의 리턴값도 문자열 타입미으로 fix() 함수를 써서 정수형으로 바꾸었습니다. 정수형 변환이 필요 없다면 fix() 함수를 벗겨내면 됩니다.

    좀 다른 방법으로 다음과 같이 format 코드를 이용하여 분해하는 방법도 있습니다.

    yy=0 & mm=0 & dd=0 & hh=0 & mi=0
    reads, time, yy, mm, dd, hh, mi, format='(I4,4I2)’

    C의 printf 스타일 포맷코드를 이용하면 다음과 같이 씁니다. 내부 작동 방식은 동일합니다.

    reads, time, yy, mm, dd, hh, mi, format='(%”%4d%2d%2d%2d%2d”)’

    답변: 배열에서 원하는 지점 출력 #836
    Jonghyuk
    회원

    openw,8,’d:/test/out/output.txt’ ;;
    for ii=0, ct-1 do begin
    openr,7, result1[ii]
    radar_org=fltarr(lon_num, lat_num)
    readf, 7, radar_org
    printf, 8, radar_org(2,2), radar_org(3,3) ;; 8번 file에 쓰는 것
    close,7
    endfor
    close, 8 ;;8번 파일 닫기
    end

    화면 출력되는 모든 내용을 화면이 아닌 File에 쓰고자 할 때, 작업의 순서를 정리하면 위와 같습니다.

    답변: IDL에서 excel Data 읽는 부분에서… #827
    Jonghyuk
    회원

    오래 전에 나온, 비공식적인 루틴이었던 것으로 기억합니다.
    아마 Excel의 버전도 탈 거고, IDL의 버전도 관계가 있을 것 같습니다.
    COM Object라고 하는 Windows 운영체제 내의 프로그램 인식 방식을 이용하는 것인데, Excel도 버전마다 COM 레퍼런스가 다릅니다.
    아마 그 문제가 아닐까 생각하고, 현재 업무에 쓰시기에는 불편함이 있을 것으로 생각합니다. 그냥 Excel 파일을 CSV 같은 텍스트 기반의 파일로 다시 저장해서 사용하시는 것이 좋을 것 같습니다.

    답변: IDL spectrogram #811
    Jonghyuk
    회원

    스펙트로그램을 그리는 방법도 고정된 것은 없기 때문에, IDL에 어떤 함수가 있다고 말씀드리기는 어렵습니다.

    IDL 프롬프트에서 d_t_series를 실행해 보십시오.

    IDL> d_t_series

    이는 IDL에 포함된 여러 데모 프로그램 중 하나인데, 가로축은 날짜, 세로축은 시간, 그리고 색은 전력량을 보여주는 일종의 스펙트로그램입니다. 물론 여기에 GUI 가 포함되어 있어 마우스를 옮길 때마다 단면 Plot이 함께 새로 그려지는 기능도 있어서 프로그램은 조금 복잡해 보입니다.

    소스코드는
    IDL> .edit d_t_series
    와 같이 열어 볼 수 있고, 신비로운 곳에 숨어있는 것이 아니라,
    IDL 설치디렉토리/examples/demo/demosrc/d_t_series.pro
    프로그램입니다.

    이 예제 프로그램에서는 데이터를 2차원 배열로 만들어서 CONGRID 함수를 이용해 원하는 크기로 늘렸습니다.
    올려주신 데이터를 보자면, n개의 일정한 시간간격으로 플럭스가 있다면 세로축은 10keV, 500keV, 1MeV 3개요소가 있으므로, n*3의 2차원 배열을 만들 수 있을 것 같습니다.
    그런데 3개의 에너지레벨밖에 없다면 그냥 3개의 Plot으로 그리는 것이 더 보기 좋지 않을까 하는 생각도 해 봅니다.

    답변: ENVI+IDL 소스코드 문의 #793
    Jonghyuk
    회원

    4번 밴드가 맞다면 지적하신 대로 POS[3] 이 맞을 것 같습니다.

    Jonghyuk
    회원

    리눅스에서 도움말은 웹브라우저를 통해 보여집니다. 디폴트 웹브라우저 (아마도 Firefox 일 것으로 예상하는데요), 를 열고 메시지 내용대로 File > 오프라인에서 작업의 체크를 해제해 보세요.

    답변: 이런게 가능할까요? #762
    Jonghyuk
    회원

    가능합니다.
    아마도 운영체제에서 프로그램(.sav)을 실행할 때, arguments 를 받아들이는 문제를 말씀하시는 것 같습니다.
    command_line_args() 함수를 이용하시면 되며, 아래 링크된 문서를 검토해 보시면 될 것 같습니다.

    http://www.idl-envi.co.kr/callcenter/tips/file/30_1319595722.pdf

    답변: 안녕하세요 file_search 부분 #733
    Jonghyuk
    회원

    일단 print, result1
    하셔서 파일들을 잘 찾았는지 확인해 보세요.

    에러 나오는 줄이라고 말씀하신 부분… 이렇게 하고 싶다고 하신 부분… 그렇게 하시면 됩니다.
    올려주신 코드만 놓고 보자면, openr, 7, result1[ii] 라고 해야 합니다.
    에러 메시지를 보면 좀 더 정확해지겠지만, 이미 7번 파일 사용 중 이라는 의미의 에러일 수 있습니다.
    반복문 시작 전에, close, /all 해주시면 이 문제는 해결할 수 있습니다.

    맨 마지막에 endfor 있어야 하고,
    acc_radar[*, *, ii] = radar_org 앞에
    readf 로 radar_org 읽어야 의미가 있을 거구요.

15 글 보임 - 136 에서 150 까지 (총 174 중에서)