基于另一个变量在 python 中子集 netCDF
Subset netCDF in python based on another variable
我有一个 netCDF 文件,我想根据 netCDF 文件中的另一个变量替换一些数据。该文件可在此处获得:https://umd.box.com/s/lrb12vl7bxbqpv2lt0c27t8m0ps0nm0e
并具有以下结构:
dimensions:
lat = 720;
time = 3;
lon = 1440;
variables:
float cntry_codes(lat=720, lon=1440);
:_FillValue = 0.0f; // float
float data(time=3, lat=720, lon=1440);
:_FillValue = NaNf; // float
:units = "%";
int time(time=3);
float longitude(lon=1440);
float latitude(lat=720);
我想将网格单元格中的 'data' 值(其中 cntry_codes 值为 840)替换为新值 0.8。我正在尝试这样子集化:
import netCDF4
lat_inds = numpy.where(cntry_codes = 840.0)
lon_inds = numpy.where(cntry_codes = 840.0)
然而,这是行不通的。有更好的解决方案吗?
尝试以下操作:
import netCDF4 as nc
dataset = nc.Dataset('/path/to/data.nc', 'r+')
cntry = dataset.variables['cntry_codes'][:]
shape = dataset.variables['data'].shape
for i in range(shape[0]):
data_i = dataset.variables['data'][i]
data_i[cntry == 840.0] = 0.8
dataset.variables['data'][i] = data_i
dataset.close()
现在,您的 data.nc 文件应该会更新为新信息。告诉我是否有帮助。
netCDF4-python 库的文档是 here。
我有一个 netCDF 文件,我想根据 netCDF 文件中的另一个变量替换一些数据。该文件可在此处获得:https://umd.box.com/s/lrb12vl7bxbqpv2lt0c27t8m0ps0nm0e 并具有以下结构:
dimensions:
lat = 720;
time = 3;
lon = 1440;
variables:
float cntry_codes(lat=720, lon=1440);
:_FillValue = 0.0f; // float
float data(time=3, lat=720, lon=1440);
:_FillValue = NaNf; // float
:units = "%";
int time(time=3);
float longitude(lon=1440);
float latitude(lat=720);
我想将网格单元格中的 'data' 值(其中 cntry_codes 值为 840)替换为新值 0.8。我正在尝试这样子集化:
import netCDF4
lat_inds = numpy.where(cntry_codes = 840.0)
lon_inds = numpy.where(cntry_codes = 840.0)
然而,这是行不通的。有更好的解决方案吗?
尝试以下操作:
import netCDF4 as nc
dataset = nc.Dataset('/path/to/data.nc', 'r+')
cntry = dataset.variables['cntry_codes'][:]
shape = dataset.variables['data'].shape
for i in range(shape[0]):
data_i = dataset.variables['data'][i]
data_i[cntry == 840.0] = 0.8
dataset.variables['data'][i] = data_i
dataset.close()
现在,您的 data.nc 文件应该会更新为新信息。告诉我是否有帮助。
netCDF4-python 库的文档是 here。