MATLAB Answers

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

17 ビュー (過去 30 日間)
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 = '';
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 件のコメント



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')
time = 61
Size: 61x1
Dimensions: time
Datatype: double
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
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.


その他の回答 (1 件)

Rohit Kudva
Rohit Kudva 2015 年 8 月 6 日
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 件のコメント


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by