2014-07-09 7 views
1

matlab을 사용하여 netCDF 파일에서 시간 좌표 데이터를 읽으려고합니다. 특정 시간 (아래 참조) 시간의 수에 해당하는 double 형식으로 시간 변수가있는 netCDF 파일이 있습니다.시간 속성을 사용하여 netcdf 파일에서 정수 시간 데이터를 읽는 쉬운 방법이 있습니까?

변수 속성 : 내가 MATLAB에 ncread를 사용하여 시간 변수)를 읽을

double time(Time) ; 
      time:standard_name = "Time" ; 
      time:units = "hours since 2002-01-01 0:0:0" ; 
      time:calendar = "proleptic_gregorian" ; 

, 그냥 예를 들어, 정수를 출력, 1. 그러나 "ncdump"를 사용하여 파일을 탐색하는 경우 좌표 시간은 예를 들어 2002-01-01입니다.

구체적으로는 "ncdump -t -v time ncfile.nc"

저는 matlab에 비교적 익숙합니다. 그리고 비슷하거나 똑같이 간단한 방법으로이 시간 변수를 matlab의 좌표 시간으로 문자열이나 숫자로 읽는 방법을 알고 있는지 궁금합니다. 날짜. 특히, 나는 속성 문자열을 파싱하고 정수 데이터를 실제 날짜로 변환하기위한 포인터와 조건을 묶어서 코딩하는 것을 피하고 싶습니다.

또는이 파일에 날짜 배열을 문자열로 사용하는 새로운 시간 변수를 만들어야합니까?

모든 정보는 대단히 감사합니다! 감사합니다.

답변

2

NetCDF는 시간을 epoch의 오프셋으로 저장합니다. 변수 속성에서 신기원은 2002-01-01 0 : 0 : 0이며 시간은 그 이후의 시간입니다. Matlab은 날짜 수라고하는 비슷한 방법론을 가지고 있지만, 신기원 이후의 일 (즉, 피벗 연도라고 부름)을 기반으로합니다. 조사해야 할 두 가지 기능이 있습니다 : datenum과 datestr. 첫 번째는 문자열을 날짜 번호로 변환하고 다른 문자열은 날짜 번호를 날짜 문자열로 변환합니다.

24로 나누면 시간 변수를 호환되는 Matlab 날짜 수로 변환 한 다음 datestr 함수를 사용하여 원하는대로 형식을 지정할 수 있습니다. 간단한 예제는 다음과 같습니다 :

>> time = [1;2;3;4]; 
>> datestr(time./24+datenum('2002-01-01 0:0:0')) 
ans = 
01-Jan-2002 01:00:00 
01-Jan-2002 02:00:00 
01-Jan-2002 03:00:00 
01-Jan-2002 04:00:00 

두 함수와 관련된 Matlab 도움말 파일을보고 원하는대로 날짜 출력을 포맷 할 수 있습니다.