我有一个xarray数据集,涵盖经度从9到30和54到66。如何将该数据集中的所有变量从特定坐标范围设置为-1?
一旦我执行 df.isel 或 df.iloc 或 df.sel 或 df.loc,我就会得到一个数据子集,它比原始数据集小得多。我想获得原始分辨率的数据集。
一些小例子:
#!/usr/bin/env ipython
import xarray as xr
import numpy as np
# --------------------------
xvals = np.arange(9,30,1);nx = np.size(xvals);
yvals = np.arange(53,66,0.5);ny = np.size(yvals);
# -----------------------------------------------
data_a = np.random.random((ny,nx));
data_b = np.random.random((ny,nx));
somedata = xr.Dataset(data_vars={'data_a':(('latc','lonc'),data_a),'data_b':(('latc','lonc'),data_b)},coords={'lonc':('lonc',xvals),'latc':('latc',yvals)})
# -----------------------------------------------
# How to set all data variables in somedata at coordinate range lonc = 15-20 and latc=59-61 to -1e0 using xarray?
我可以轻松使用 NumPy:
# -----------------------------------------------
# NumPy:
xm, ym = np.meshgrid(xvals,yvals);
kk = np.where((xm>15) & (ym>59) & (xm<20) &(ym<61))
data_a[kk] = -1.e0;
data_b[kk] = -1.e0;
somedata['data_a'][:] = data_a;
somedata['data_b'][:] = data_b;
somedata.to_netcdf('test.nc')
# -----------------------------------------------
但也许还有一种很好的方法,使用 xarray 来处理所有变量?