Python - Пространственная дисперсия параметра в файле netCDF - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть файл netCDF monthly_qc_data.nc, представляющий ежемесячное значение вызова параметра Lai_500m в ограничительной рамке 0,5º.

Учитывая, что центр файла ограничительной рамки / netCDF являетсяориентир.Я хотел бы рассчитать разницу параметра Lai_500m относительно значения этого параметра в центре ограничивающей рамки.

Для этого я использую следующее:

##SPATIAL VARIANCE
os.chdir(inbasedir)
data = xr.open_dataset('monthly_qc_data.nc')
ref_data = data.where((data['lat'] ==  10) & (data['lon'] == 10)) #considering the poin lat:10 and lon:10 as the center of the bounding box
dif_data = data.where((data['Lai_500m'] - ref_data))

К сожалению, это возвращает следующую ошибку:

ufunc 'bitwise_and' not supported for the input types, and the inputs could not be 
safely coerced to any supported types according to the casting rule ''safe''

Я также пытался использовать python netCDF4:

from netCDF4 import Dataset 
os.chdir(inbasedir)
dataset = Dataset("monthly_qc_data.nc")
dif_data = dataset.variables['Lai_500m'][:,:,:] - dataset.variables['Lai_500m'][:,10,10] 

, который также возвратил (очевидную) ошибку:

ValueError: operands could not be broadcast together with shapes (12,120,120) (12,) 

Кто-нибудь знает, как это побороть?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Я знаю, что вы искали ответ Python, но на всякий случай он полезен, вот как вы можете выполнить ту же функцию из командной строки с помощью cdo:

cdo sub in.nc -remapnn,lon=10/lat=10 in.nc diff.nc
0 голосов
/ 01 марта 2019

Вы должны иметь возможность получить свои ref_data как число с плавающей точкой, а затем вычесть из набора данных, то есть

ref_data = float(data.Lai_500m.sel(lat=10.0, lon=10.0).values)
dif_data = data.Lai_500m - ref_data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...