2016-05-11 89 views
0

我想設置低於恆定的所有值C 1至C本身在NetCDF文件:使用氣候數據運營商(CDO)file.nc在NetCDF文件設定低於閾值的閾值

的解決方案將是

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 

但是有沒有一個整潔/較短的方式來做到這一點?

回答

3

您可以使用NCO's ncap2輕鬆完成此操作。

例如,在file2.ncfile.nc和輸出設置的x所有值以下100至100:

>>> ncap2 -s 'where(x<100.) x=100;' file.nc -O file2.nc 
0

使用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() 

好運氣!

+1

我同意這個工作,但我一般都認爲,'數據[<閾值= threshold'是在Python這樣做的更快的方法。 – N1B4

+1

我同意。我總是忘記這個較短的語法。現在我不會! – AvlWx

2

ncap2的剪裁操作是最簡潔:

ncap2 -s 'x=x>>100' in.nc out.nc