特定位置的 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 索引指南。
我有一个 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 索引指南。