特定位置的 Xarray 掩蔽

Xarray masking at certain location

我有一个 xarray 数据集,想将数据集中特定区域的变量值转换为 Nan 值。使用 dataset.where 我只得到特定区域作为输出,但我想将值保留在数组中掩码周围的位置。 所以基本上我想保留我的数据集,但用 NaN 替换某些坐标处的变量值。

[数据集称为 Lae21,lon/lat_mask 是数据集的切片坐标]

`print(Lae21)
mask = Lae21.where((Lae21.x!=lon_mask) & (Lae21.y!=lat_mask)) 
print(mask)`

    <xarray.Dataset>
Dimensions:  (y: 1614, x: 7682)
Coordinates:
  * y        (y) float64 5.261e+06 5.261e+06 5.261e+06 ... 5.256e+06 5.256e+06
  * x        (x) float64 4.389e+05 4.389e+05 4.389e+05 ... 4.619e+05 4.619e+05
Data variables:
    NDVI     (y, x) float32 ...
Attributes:
    transform:            (3.0, 0.0, 438857.72, 0.0, -3.0, 5260962.7)
    crs:                  +init=epsg:32632
    res:                  (3.0, 3.0)
    is_tiled:             0
    nodatavals:           (nan,)
    scales:               (1.0,)
    offsets:              (0.0,)
    AREA_OR_POINT:        Area
    TIFFTAG_XRESOLUTION:  1
    TIFFTAG_YRESOLUTION:  1
<xarray.DataArray 'NDVI' (y: 3, x: 3)>
array([[nan, nan, nan],
       [nan, nan, nan],
       [nan, nan, nan]], dtype=float32)
Coordinates:
  * y        (y) float64 5.259e+06 5.259e+06 5.259e+06
  * x        (x) float64 4.521e+05 4.521e+05 4.521e+05

所以生成的数组应该是原始数据集 Lae21 的所有值和掩码特定位置的 NaN 值。 (查看 .where 函数的示例,我认为应该是输出...)。

非常感谢您的回答!

我会为此使用 .loc 方法:

Lae21.NDVI.loc[{"x": lat_mask, "y": lon_mask}] = np.NaN

有关详细信息,请参阅 this specific chapter 的 xarray 索引指南。