基于索引的 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
假设我有一个 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