4

我想在 netcdf 文件中将常数c以下的所有值设置为c本身: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

但是有没有更简洁/更短的方法来做到这一点?

4

4 回答 4

6

您可以使用NCO 的 ncap2轻松完成此操作。

例如,将所有x低于 100 的值设置为 100 infile.nc并输出 in file2.nc

>>> ncap2 -s 'where(x<100.) x=100;' file.nc -O file2.nc 
于 2016-05-12T16:24:21.073 回答
6

ncap2 的裁剪算子最简洁:

ncap2 -s 'x=x>>100' in.nc out.nc
于 2016-06-03T02:41:39.513 回答
1

将 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()

祝你好运!

于 2016-05-12T17:22:27.210 回答
1

还有一种更有效的方法可以通过使用expr. 将this post中的示例改编为this question中的具体示例,假设变量的名称是x并且常量是c,那么命令将是这样的:

cdo -expr,'x = ((x > c)) ? x : c' infile.nc outfile.nc

where?:是三元条件运算符,and x ? y : z,表示y if x not equal 0, else z。有关运算符和表达式的其他信息,请参阅CDO 手册,第 2.7.1 节。

于 2021-10-06T15:38:05.530 回答