python中的子集netCDF基于另一个变量

时间:2015-09-15 19:48:04

标签: python netcdf

我有一个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);

我想替换“数据”'网格单元格中的值(其中cntry_codes值为840)为新值0.8。我想尝试这样的子集:

import netCDF4
lat_inds = numpy.where(cntry_codes = 840.0)
lon_inds = numpy.where(cntry_codes = 840.0)

然而,这只是行不通。有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

尝试以下方法:

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