如何使用 Python 和 xarray 从变量满足 netCDF 数据集标准的位置提取坐标?

ale*_*xtc 5 python netcdf pandas python-xarray

我有一个 xarray DataArray 对象,da_criteria_daily是从 netCDF 文件生成的。

<xarray.DataArray (time: 365, latitude: 106, longitude: 193)>
dask.array<shape=(365, 106, 193), dtype=bool, chunksize=(1, 106, 193)>
Coordinates:
  * time       (time) datetime64[ns] 2017-01-01 2017-01-02 ... 2017-12-31
  * latitude   (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
  * longitude  (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0
Run Code Online (Sandbox Code Playgroud)

这是一个地理范围内一年多的每日数据。该变量是布尔类型。

我想获取变量为 True 的特定日期的所有坐标(纬度、经度)值。

new_da = da_criteria_daily.where(da_criteria_daily==True, drop=True)
print(new_da)
Run Code Online (Sandbox Code Playgroud)

我有:

<xarray.DataArray (time: 161, latitude: 106, longitude: 193)>
dask.array<shape=(161, 106, 193), dtype=float64, chunksize=(1, 106, 193)>
Coordinates:
  * time       (time) datetime64[ns] 2017-01-01 2017-01-02 ... 2017-12-31
  * latitude   (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
  * longitude  (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0
Run Code Online (Sandbox Code Playgroud)

您是否有任何带有 xarray.DataArray 的函数可用于从变量中检索坐标?

Jul*_*les 6

你可以用 numpy 这样做:

numpy.argwhere(numpy.array(da_criteria_daily))
Run Code Online (Sandbox Code Playgroud)

numpy.argwhere()为您提供非零(True)元素的索引。然后您可以使用经度、纬度和时间坐标数组来获取真实值。

使用 xarray.where()只会将不满足条件的值替换为 nans,也就是说,您的 False 值现在将是 nans。我不知道 xarray 有什么方法可以获取某些值的坐标。它绝对有用,但我想还没有人开发它。