MATLAB Answers

K E
0

Why is ncread reading in times which are wrong by a year?

K E
さんによって質問されました 2015 年 8 月 4 日
最新アクティビティ Kelly Kearney
さんによって 編集されました 2015 年 8 月 14 日
I am getting the wrong year when I read in data from the file below using ncread.
url = 'http://nomads.ncep.noaa.gov:9090/dods/wave/wna/wna20150804/wna20150804_00z';
timeFromNetcdf = ncread(url, 'time');
datestr([timeFromNetcdf(1) timeFromNetcdf(end)])
ans =
04-Aug-2014 00:00:00
11-Aug-2014 12:00:00
You can see from the file name that the year is actually 2015 not 2014. Am I doing something wrong in ncread, perhaps due to the zero-based index in netcdf vs. one-based index in matlab, or is the time variable in the netcdf file simply wrong?

  0 件のコメント

サインイン to comment.

2 件の回答

Kelly Kearney
回答者: Kelly Kearney
2015 年 8 月 6 日
編集済み: Kelly Kearney
2015 年 8 月 6 日
 採用された回答

No, it's not a bug. Matlab datenumbers are defined as days since Jan 0, 0000. But if you look at the attributes for your time variable:
>> ncdisp(url, 'time')
Source:
http://nomads.ncep.noaa.gov:9090/dods/wave/wna/wna20150804/wna20150804_00z
Format:
classic
Dimensions:
time = 61
Variables:
time
Size: 61x1
Dimensions: time
Datatype: double
Attributes:
grads_dim = 't'
grads_mapping = 'linear'
grads_size = '61'
grads_min = '00z04aug2015'
grads_step = '3hr'
units = 'days since 1-1-1 00:00:0.0'
long_name = 'time'
minimum = '00z04aug2015'
maximum = '12z11aug2015'
resolution = 0.125
you'll see that the reference time for that variable is Jan 1, 0001. So the proper conversion is
t = ncread(url, 'time') + datenum(1,1,1);
datestr(t([1 end]))
ans =
06-Aug-2015 00:00:00
13-Aug-2015 12:00:00
(Though there seems to be a 2-day shift in there... if this is model data based on a 365-day year or something like that, then datenumbers may not be the best thing to use).

  2 件のコメント

K E
2015 年 8 月 11 日
Great, thanks. I know for other netcdf variables, ncread will apply any offset and scaling; wish it did that for time as well.
Kelly Kearney
2015 年 8 月 14 日
The add_offset and scale_factor properties are universal characteristics of netCDF data, defined in the file conventions, so ncread was designed to look for these properties.
However, the units property of a time dimension (or any dimension or variable, for that matter) is completely arbitrary. Your file happens to use days as a unit, but it could be seconds, hours, blue moons, whatever... there's really no way for ncread to know what conversion you would want.

サインイン to comment.


回答者: Rohit Kudva 2015 年 8 月 6 日

Hi,
I executed the code you provided and I was able to reproduce this issue. This seems to be a bug in MATLAB. I work for MathWorks and I have forwarded this feedback to the appropriate product team.
- Rohit

  0 件のコメント

サインイン to comment.



Translated by