基于索引的 Xarray 条件子集

Xarray conditional subsetting based on index

假设我有一个 xr.DataArray A 具有三个维度 (time,lon,lat) 包含一些随机数据。现在我有第二个 xr.DataArray B 具有与 A[= 相同的网格的二维 (lon,lat) 37=]。 B 的值表示 A.

的基于整数的 time 索引

如何根据 B 中存在的整数值对 A 进行子集化?

也就是说,我想获得 A 的值,其中 time 坐标的整数索引等于 B[= 的值37=].

MWE


import numpy as np
import pandas as pd
import xarray as xr

A = xr.DataArray(np.random.randn(10,5,5),
                 dims=['time','lon','lat'], 
                 coords={'time':pd.date_range("2000-01-01", periods=10),
                         'lon':np.arange(1,6),
                         'lat':np.arange(1,6)
                         }
                  )

B = xr.DataArray(np.random.randint(0,9,(5,5)),
                 dims=['lon','lat'], 
                 coords={'lon':np.arange(1,6),
                         'lat':np.arange(1,6)
                         }
                  )



感谢您提供清晰的示例。

IIUC,你想用B中的值到selectA的时间坐标的索引:

In [9]: A.isel(time=B)
Out[9]:
<xarray.DataArray (lon: 5, lat: 5)>
array([[ 1.01208355,  1.29773366,  0.53875951,  2.45590211,  0.49782187],
       [-1.25561793,  1.00070962,  1.39388746, -0.88571071, -0.58113385],
       [ 1.21686752, -1.71612589,  0.08652589,  0.12663398,  0.4425077 ],
       [ 1.65911561, -0.41454701, -0.69167209,  0.59707559,  0.64610678],
       [ 0.7255797 ,  1.27375691, -0.10813576, -0.94236789,  1.53208474]])
Coordinates:
    time     (lon, lat) datetime64[ns] 2000-01-01 2000-01-04 ... 2000-01-08
  * lon      (lon) int64 1 2 3 4 5
  * lat      (lat) int64 1 2 3 4 5