我有一个netcdf文件,它有几个值< 0。我想用一个单一的值(比如说-1)来替换它们。我如何使用netCDF4实现这一目标?我在文件里读到这样的内容:
import netCDF4
dset = netCDF4.Dataset('test.nc')
dset[dset.variables['var'] < 0] = -1发布于 2015-08-06 23:14:13
如果希望将数据保存在netCDF变量对象中,则应该可以:
import netCDF4
dset = netCDF4.Dataset('test.nc', 'r+')
dset['var'][:][dset['var'][:] < 0] = -1
dset.close() # if you want to write the variable back to disk如果您不想写回磁盘,那么继续获取numpy数组并将其切片/分配给它:
data = dset['sea_ice_cover'][:] # data is a numpy array
data[data < 0] = -1发布于 2017-01-02 20:29:20
对我来说,前面的答案行不通,我用以下方法解决了这个问题:
dset = netCDF4.Dataset('test.nc','r+')
dset.variables['var'][:]
... your changes ...
dset.close() 发布于 2019-06-09 14:19:15
解决方案1: Python
此解决方案使用xarray读取和写入netcdf文件,并使用包的函数http://xarray.pydata.org/en/stable/generated/xarray.where.html有条件地重置值。
import xarray as xr
ds=xr.open_dataset('test.nc')
ds['var']=xr.where((ds['var']<0),-1,ds['var'])
ds.to_netcdf('modified_test.nc') # rewrite to netcdf解决方案2:来自命令行的NCO
我知道OP需要一个python解决方案,但是如果有人只想通过命令行快速执行这个任务,还有一种使用nco的方法:
ncap2 -s 'where(x<0.) x=-1;' input.nc -O output.nc根据这篇文章:setting values below a threshold to the threshold in a netcdf file
解决方案3:命令行中的CDO
cdo还具有表达式功能,允许您在命令行的一行程序中执行此操作。
cdo -expr,'var = ((var < 0)) ? -1 : var' infile.nc outfile.ncpython中有一个cdo包,它允许您直接在python中使用此功能,而无需求助于sys。
https://stackoverflow.com/questions/31865410
复制相似问题