Установка значений от порога до порога в файле netcdf

Я хочу установить все значения ниже константы 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

Но есть ли более аккуратный / короткий способ сделать это?

5 ответов

Решение

Вы можете использовать NCO ncap2, чтобы сделать это легко.

Например, установить все значения x ниже 100 до 100 в file.nc и вывод в file2.nc:

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

Оператор отсечения в ncap2 наиболее лаконичен:

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

Чтобы установить все приведенные ниже значения на , вы можете использовать команду Операторов климатических данных (cdo).

      cdo setrtoc,-inf,$c,$c infile.nc outfile.nc

Команда установит все значения в диапазоне между-inf(минус бесконечность) и$c. Дополнительная информация поsetrtocоператора можно найти в руководстве CDO в разделе 2.15.7 .

Используя 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()

Удачи!

Существует также более эффективный способ сделать это с помощью оператора климатических данных (CDO), используя expr. Адаптируя пример из этого сообщения к конкретному примеру из этого вопроса, предполагая, что имя переменной - 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, раздел 2.7.1.

Другие вопросы по тегам