将低于阈值的值设置为 netcdf 文件中的阈值
setting values below a threshold to the threshold in a netcdf file
我想将所有低于常数 c 的值设置为 c 本身在 netcdf 文件中:file.nc
使用气候数据运算符 (CDO) 的解决方案是
cdo mul -gec,$c file.nc file.nc t1.nc
cdo add -mulc,$c -ltc,$c file.nc t1.nc output.nc
rm -f t1.nc
但是有没有 neater/shorter 方法来做到这一点?
您可以使用 NCO's ncap2 轻松完成此操作。
例如在file.nc
中将x
所有100以下的值设为100,在file2.nc
中输出:
>>> ncap2 -s 'where(x<100.) x=100;' file.nc -O file2.nc
将 Python 与 NumPy 和 netCDF4 结合使用,您可以执行以下操作:
import numpy as np
from netCDF4 import Dataset
dataset = Dataset('/path/to/dataset','r+')
data = dataset.variables['data_variable_name'][:]
threshold = 100 # or whatever your constant c is
# np.where(condition, value if true, value if false)
new_data = np.where(data < threshold, threshold, data)
# Write your new data back to the NetCDF file
dataset.variables['data_variable_name'][:] = new_data[:]
dataset.close()
祝你好运!
ncap2的裁剪算子最简洁:
ncap2 -s 'x=x>>100' in.nc out.nc
还有一种更有效的方法可以使用 expr
与气候数据操作员 (CDO) 一起执行此操作。将 this post 中的例子改编为这个问题的具体例子,假设变量的名称是 x 并且常量是 c,那么命令将是这样的:
cdo -expr,'x = ((x > c)) ? x : c' infile.nc outfile.nc
其中?
和:
是三元条件运算符,x ? y : z
表示y if x not equal 0, else z
。有关运算符和表达式的其他信息,请参见 CDO Manual,第 2.7.1 节。
我想将所有低于常数 c 的值设置为 c 本身在 netcdf 文件中:file.nc
使用气候数据运算符 (CDO) 的解决方案是
cdo mul -gec,$c file.nc file.nc t1.nc
cdo add -mulc,$c -ltc,$c file.nc t1.nc output.nc
rm -f t1.nc
但是有没有 neater/shorter 方法来做到这一点?
您可以使用 NCO's ncap2 轻松完成此操作。
例如在file.nc
中将x
所有100以下的值设为100,在file2.nc
中输出:
>>> ncap2 -s 'where(x<100.) x=100;' file.nc -O file2.nc
将 Python 与 NumPy 和 netCDF4 结合使用,您可以执行以下操作:
import numpy as np
from netCDF4 import Dataset
dataset = Dataset('/path/to/dataset','r+')
data = dataset.variables['data_variable_name'][:]
threshold = 100 # or whatever your constant c is
# np.where(condition, value if true, value if false)
new_data = np.where(data < threshold, threshold, data)
# Write your new data back to the NetCDF file
dataset.variables['data_variable_name'][:] = new_data[:]
dataset.close()
祝你好运!
ncap2的裁剪算子最简洁:
ncap2 -s 'x=x>>100' in.nc out.nc
还有一种更有效的方法可以使用 expr
与气候数据操作员 (CDO) 一起执行此操作。将 this post 中的例子改编为这个问题的具体例子,假设变量的名称是 x 并且常量是 c,那么命令将是这样的:
cdo -expr,'x = ((x > c)) ? x : c' infile.nc outfile.nc
其中?
和:
是三元条件运算符,x ? y : z
表示y if x not equal 0, else z
。有关运算符和表达式的其他信息,请参见 CDO Manual,第 2.7.1 节。