xarray - select 特定 x 和 y 坐标处的数据
xarray - select the data at specific x AND y coordinates
在 x,y 位置使用 xarray 选择数据时,我得到了任意一对 x,y 的数据。我想要一个一维数组而不是来自选择的二维数组。有没有一种有效的方法来做到这一点? (现在我用 for 循环来做...)
x = [x1,x2,x3,x4]
y = [y1,y2,y3,y4]
DS = 二维数组
subset = Dataset.sel(longitude=x, latitude=y, method='nearest')
换句话说,我希望数据集位于 [x1,y1]、[x2,y2]、[x3,y3]、[x4,y4] 而不是其他位置,即 [x1,y2]。
如果索引器 DataArray
具有共同维度,则可以沿着多个索引选择点列表。这将导致数组沿着索引器的公共维度重新索引。
直接来自 More Advanced Indexing 上的文档:
In [78]: da = xr.DataArray(np.arange(56).reshape((7, 8)), dims=['x', 'y'])
In [79]: da
Out[79]:
<xarray.DataArray (x: 7, y: 8)>
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47],
[48, 49, 50, 51, 52, 53, 54, 55]])
Dimensions without coordinates: x, y
In [80]: da.isel(x=xr.DataArray([0, 1, 6], dims='z'),
....: y=xr.DataArray([0, 1, 0], dims='z'))
....:
Out[80]:
<xarray.DataArray (z: 3)>
array([ 0, 9, 48])
Dimensions without coordinates: z
索引数组也可以很容易地从 pandas DataFrame
中拉出来,用 da.sel(longitude=df.longitude.to_xarray(), latitude=df.latitude.to_xarray())
之类的东西,这将导致 DataArray
被重新索引DataFrame 的 索引。
因此,在您的情况下,与其使用列表或数组 x, y
进行选择,不如将它们转换为具有通用 dim 的 DataArrays - 我们称其为 location
:
x = xr.DataArray([x1,x2,x3,x4], dims=['location'])
y = xr.DataArray([y1,y2,y3,y4], dims=['location'])
现在您的选择将如您所愿:
ds.sel(longitude=x, latitude=y, method='nearest')
在 x,y 位置使用 xarray 选择数据时,我得到了任意一对 x,y 的数据。我想要一个一维数组而不是来自选择的二维数组。有没有一种有效的方法来做到这一点? (现在我用 for 循环来做...)
x = [x1,x2,x3,x4] y = [y1,y2,y3,y4]
DS = 二维数组
subset = Dataset.sel(longitude=x, latitude=y, method='nearest')
换句话说,我希望数据集位于 [x1,y1]、[x2,y2]、[x3,y3]、[x4,y4] 而不是其他位置,即 [x1,y2]。
如果索引器 DataArray
具有共同维度,则可以沿着多个索引选择点列表。这将导致数组沿着索引器的公共维度重新索引。
直接来自 More Advanced Indexing 上的文档:
In [78]: da = xr.DataArray(np.arange(56).reshape((7, 8)), dims=['x', 'y'])
In [79]: da
Out[79]:
<xarray.DataArray (x: 7, y: 8)>
array([[ 0, 1, 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23],
[24, 25, 26, 27, 28, 29, 30, 31],
[32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47],
[48, 49, 50, 51, 52, 53, 54, 55]])
Dimensions without coordinates: x, y
In [80]: da.isel(x=xr.DataArray([0, 1, 6], dims='z'),
....: y=xr.DataArray([0, 1, 0], dims='z'))
....:
Out[80]:
<xarray.DataArray (z: 3)>
array([ 0, 9, 48])
Dimensions without coordinates: z
索引数组也可以很容易地从 pandas DataFrame
中拉出来,用 da.sel(longitude=df.longitude.to_xarray(), latitude=df.latitude.to_xarray())
之类的东西,这将导致 DataArray
被重新索引DataFrame 的 索引。
因此,在您的情况下,与其使用列表或数组 x, y
进行选择,不如将它们转换为具有通用 dim 的 DataArrays - 我们称其为 location
:
x = xr.DataArray([x1,x2,x3,x4], dims=['location'])
y = xr.DataArray([y1,y2,y3,y4], dims=['location'])
现在您的选择将如您所愿:
ds.sel(longitude=x, latitude=y, method='nearest')