[python #NQM-429600]: Possible bugs on THREDDS?
- Subject: [python #NQM-429600]: Possible bugs on THREDDS?
- Date: Fri, 15 Feb 2019 09:24:33 -0700
I've driven your email into our support system and will respond here, that
way it won't get lost in my inbox.
The issue is that you have made a different time dimension subset request
against the variable time as compared to the variable sithick. Specifically,
0:1:1979 vs 0:1;1917.
So, netCDF-C had to create a new dimension to hold the 0:1:1917 slice on the
sithick variable. If you make the time dimension subset the same length between
those two variables, then you are good:
<class 'netCDF4._netCDF4.Dimension'>: name = 'lat', size = 22),
<class 'netCDF4._netCDF4.Dimension'>: name = 'lon', size = 144),
<class 'netCDF4._netCDF4.Dimension'>: name = 'time', size =
That said, the normal way of working with OPeNDAP from python that I've seen is
open the dataset without any subsetting parameters first, and then allow the
to subset variables as you slice them. So, something like:
At this point, only very basic metadata has been transferred (no actual data),
it's very fast.
Then, when you access a variable and make a slice, only the data associated
slice is returned. So, if we look at the variable sithick, we see:
Out: (1980, 90, 144)
To subset this one variable, just slice it like a numpy array - it's only at
point that data are actually transferred. For example, to request
sithick[0:1:1917][68:1:89][0:1:143], simply do something like:
sithick = ds.variables["sithick"][0:1918,68:90,0:144]
Then, you will see that you've made the subset:
Out: (1918, 22, 144)
Note that I've added 1 to the end each part of the slice, because OPeNDAP
is inclusive on the end of the slice, whereas numpy is not inclusive on the end
> Hi Sean
> I wonder if you can help me out to find out if there is a bug or there is
> something wrong with my code.
> I am trying to open a subset of aggregated dataset via THREDDS (this example
> is for the seaIce thickness, I only wanted to have latitude 45 North to the
> North Pole. So in my python code
> URL =
> nc1 = netCDF4.Dataset(URL)
> ...... omitted ....
> dimensions(sizes): lat(22), lon(144), time(1980), time_1(1918)
> variables(dimensions): float64 lat(lat), float64 lon(lon), float64
> time(time), float32 sithick(time_1,lat,lon)
> Where is time_1 coming from? the variable sithick should have dim like
> but it changed to time_1 which was not in the original dataset.
> if I don't specify a subset (from 45 north to the pole)
> URL =
> nc2 = netCDF4.Dataset(URL)
> ............... omitted...............
> dimensions(sizes): bnds(2), lat(90), lon(144), time(1980)
> variables(dimensions): float64 lat(lat), float64 lat_bnds(lat,bnds), float64
> lon(lon), float64 lon_bnds(lon,bnds), float64 time(time), float64
> time_bnds(time,bnds), float32 sithick(time,lat,lon)
> So something strange (wrong) of using subset which the whole purpose of
> opendap is designed for, or perhaps I made a wrong request of subset ?
Ticket ID: NQM-429600
Department: Support Python
NOTE: All email exchanges with Unidata User Support are recorded in the Unidata
inquiry tracking system and then made publicly available through the web. If
you do not want to have your interactions made available in this way, you must
let us know in each email you send to us.