Due to the current gap in continued funding from the U.S. National Science Foundation (NSF), the NSF Unidata Program Center has temporarily paused most operations. See NSF Unidata Pause in Most Operations for details.

Re: [netcdfgroup] Question about slicing from variable values, not index?

  • To: demail <demail973@xxxxxxxxxx>
  • Subject: Re: [netcdfgroup] Question about slicing from variable values, not index?
  • From: Jeff Whitaker <jswhit@xxxxxxxxxxx>
  • Date: Sat, 03 Apr 2010 06:56:35 -0600
On 4/1/10 7:35 PM, demail wrote:
Question about slicing from variable values, not index?

using:
netCDF4-0.9.win32-py2.6.exe
numpy-1.3.0-py2.6

#This works:
rootgrp = Dataset(NC_FIL, 'w', format='NETCDF4')
rootgrp.createDimension('lat', 5)
rootgrp.createDimension('lon', 5)
dogs = rootgrp.createVariable('dogs','u1',('lat','lon'))
latitudes = rootgrp.createVariable('latitude','f4',('lat',))
longitudes = rootgrp.createVariable('longitude','f4',('lon',))
lats =  numpy.arange(35,36,.2) #lats = array([ 35. ,  35.2,  35.4,  35.6,
35.8])
lons =  numpy.arange(82,83,.2) #lons = array([ 82. ,  82.2,  82.4,  82.6,
82.8])
latitudes[:] = lats
longitudes[:] = lons
dogs[:] = NumPy_2dArray #NumPy 2 d array, number of dogs at lat / lon (5 x
5)
rootgrp.close()

#Can get results:
getrootgrp = Dataset(NC_FIL, 'r', format='NETCDF4')
temp_dogs = getrootgrp.variables['dogs'][:]
temp_lat= getrootgrp.variables['latitude'][:]
temp_lon = getrootgrp.variables['longitude'][:]

OK: I want to be able to perform a slice from
getrootgrp.variables['latitude'] and getrootgrp.variables['longitude'],
based on value, not index,
that will return array [latitude, latitude, number of dogs].

Conceptually, I am thinking along the lines of Coordinate Variables or array
subscripting, but have not been successful in using it to have something
like:
temp_lat_lon_dogs = getrootgrp.variables['dogs'][:], latitude[35.2:35.8],
longitude>   82.2]

You can slice with logical operations on coordinate arrays, i.e.

data = f.variables['dogs'][numpy.logical_and(temp_lat >35.2, temp_lon < 35.8]. )

Note that you have to use numpy.logical_and since there is no && operator in python.

-Jeff



  • 2010 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: