2016-06-20 3 views
1

J'ai des jeux de données quadrillés au format .nc. Je veux extraire des données sur la base de la latitude et de la longitude. La latitude et la longitude de mes jeux de données sont présentés ci-dessous:Extraction des données du fichier .nc par latitude et longitude en python

import netCDF4 
from netCDF4 import Dataset 
f= Dataset('data.nc') 
f.variables['lat'][:] 
array([ 31.5, 30.5, 29.5, 28.5, 27.5, 26.5, 25.5, 24.5, 23.5, 
     22.5, 21.5, 20.5, 19.5, 18.5], dtype=float32) 

f.variables['lon'][:] 
array([ 60.5, 61.5, 62.5, 63.5, 64.5, 65.5, 66.5, 67.5, 68.5, 
     69.5, 70.5, 71.5, 72.5, 73.5, 74.5, 75.5, 76.5, 77.5, 
     78.5, 79.5, 80.5, 81.5, 82.5, 83.5, 84.5, 85.5, 86.5, 
     87.5, 88.5, 89.5, 90.5, 91.5], dtype=float32) 

Supposons que je veuille extraire les données pour lat = 29,5 et 65,5 = lon alors quel code est correct?

f.variables['temp'][:,2,5] 

ou

f.variables['temp'][:,29.5,65.5] 

suggestion à vous sera très appréciée!

+3

Avez-vous essayé les options que vous proposez? Jetez un oeil à http://docs.scipy.org/doc/numpy/reference/arrays.indexing.html. – Benjamin

Répondre

3

Ce code va certainement pas fonctionner:

f.variables['temp'][:,29.5,65.5] 

puisque vous index ne peut pas (ne doit pas) avec des flotteurs dans numpy ou netcdf4.

Si vous souhaitez indexer en valeur, je vous suggère de vérifier xarray:

import xarray as xr 
ds = xr.open_dataset('data.nc') 
# index by value 
ds['temp'].sel(lon=65.5, lat=29.5) 
# or index by position 
ds['temp'].isel(lon=5, lat=2) 
1

Ci-dessous est correct si la variable 'temp' est dimensionnée par lat, lon. Certaines variables NetCDF sont dimensionnées par lon, lat

f.variables['temp'][:,2,5] 

Vous pouvez vérifier les dimensions de la variable 'temp'.

print f.variables['temp'].dimensions 

code pour rechercher lat, les indices les plus proches d'une valeur LON:

https://stackoverflow.com/a/33793437/1211981