netCDF4模块如何只读取指定时间段的数据?
How to read data only for a specified period with netCDF4 module?
我想读取指定时间段内的 netCDF 数据。
我尝试读取 ncfile 的名称是 file.nc
而 ncdump -c file.nc
的部分信息是
dimensions:
lat = 1 ;
lon = 1 ;
time = UNLIMITED ; // (744 currently)
variables:
float lat(lat) ;
lat:units = "degrees_north" ;
lat:long_name = "latitude" ;
float lon(lon) ;
lon:units = "degrees_east" ;
lon:long_name = "longitude" ;
double time(time) ;
time:units = "hours since 2015-07-01 01:00:00" ;
time:long_name = "time" ;
double rain(time, lat, lon) ;
rain:_FillValue = -999000000. ;
rain:units = "K" ;
rain:standard_name = "temperature"
data:
lat = 1 ;
lon = 1 ;
time = -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, ...
737, 738, 739, 740, 741, 742 ;
这是我读取这个 ncfile 的脚本。
import netCDF4
nc = netCDF4.Dataset(file.nc, 'r')
data = nc.variables['temperature'][:] #I want to read between 2015-07-20 00:00 to 2015-07-24 23:00
我想在特定时间段之间读取并检测开始日期和结束日期。如何解决?
正如@Bart 所建议的,xarray 是正确的选择。这是答案 w/o xarray。 NetCDF4.date2index()
就是答案。
import netCDF4
import dateutil.parser
nc = netCDF4.Dataset(file.nc, 'r')
# all_times variable includes the time:units attribute
all_times = nci.variables['time']
sdt = dateutil.parser.parse("2015-07-20T00:00:00")
edt = dateutil.parser.parse("2015-07-24T23:00:00")
st_idx = netCDF4.date2index(sdt, all_times)
et_idx = netCDF4.date2index(edt, all_times)
data = nc.variables['temperature'][st_idx:et_idx+1,:] #I want to read between 2015-07-20 00:00 to 2015-07-24 23:00
我想读取指定时间段内的 netCDF 数据。
我尝试读取 ncfile 的名称是 file.nc
而 ncdump -c file.nc
的部分信息是
dimensions:
lat = 1 ;
lon = 1 ;
time = UNLIMITED ; // (744 currently)
variables:
float lat(lat) ;
lat:units = "degrees_north" ;
lat:long_name = "latitude" ;
float lon(lon) ;
lon:units = "degrees_east" ;
lon:long_name = "longitude" ;
double time(time) ;
time:units = "hours since 2015-07-01 01:00:00" ;
time:long_name = "time" ;
double rain(time, lat, lon) ;
rain:_FillValue = -999000000. ;
rain:units = "K" ;
rain:standard_name = "temperature"
data:
lat = 1 ;
lon = 1 ;
time = -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, ...
737, 738, 739, 740, 741, 742 ;
这是我读取这个 ncfile 的脚本。
import netCDF4
nc = netCDF4.Dataset(file.nc, 'r')
data = nc.variables['temperature'][:] #I want to read between 2015-07-20 00:00 to 2015-07-24 23:00
我想在特定时间段之间读取并检测开始日期和结束日期。如何解决?
正如@Bart 所建议的,xarray 是正确的选择。这是答案 w/o xarray。 NetCDF4.date2index()
就是答案。
import netCDF4
import dateutil.parser
nc = netCDF4.Dataset(file.nc, 'r')
# all_times variable includes the time:units attribute
all_times = nci.variables['time']
sdt = dateutil.parser.parse("2015-07-20T00:00:00")
edt = dateutil.parser.parse("2015-07-24T23:00:00")
st_idx = netCDF4.date2index(sdt, all_times)
et_idx = netCDF4.date2index(edt, all_times)
data = nc.variables['temperature'][st_idx:et_idx+1,:] #I want to read between 2015-07-20 00:00 to 2015-07-24 23:00