如何找到与 xarray 的特定选择等效的索引?

max*_*oku 6 python python-xarray

我有一个 xarray 数据集。

<xarray.Dataset>
Dimensions:           (lat: 92, lon: 172, time: 183)
Coordinates:
  * lat               (lat) float32 4.125001 4.375 4.625 ... 26.624994 26.874996
  * lon               (lon) float32 nan nan nan ... 24.374996 24.624998 24.875
  * time              (time) datetime64[ns] 2003-09-01 2003-09-02 ... 2004-03-01
Data variables:
    swnet        (time, lat, lon) float32 dask.array<shape=(183, 92, 172), chunksize=(1, 92, 172)>
Run Code Online (Sandbox Code Playgroud)

查找最近的经纬度

df.sel(time='2003-09-01', lon=6.374997, lat=16.375006, method='nearest')

需要找到

该特定位置的索引。基本上,row-column在网格中。最简单的方法是什么?

尝试过

nearestlat=df.sel(time='2003-09-01', lon=6.374997, lat=16.375006, method='nearest')['lat'].values 
nearestlon=df.sel(time='2003-09-01', lon=6.374997, lat=16.375006, method='nearest')['lon'].values 
rowlat=np.where(df['lat'].values==nearestlat)[0][0] 
collon=np.where(df['lon'].values==nearestlon)[0][0] 
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否是正确的方法。我怎样才能“正确”地做到这一点?

Ric*_*ell 7

我同意找到与操作相关的索引.sel比人们想象的要困难!

这段代码的工作原理:

import xarray as xr
ds = xr.tutorial.open_dataset('air_temperature')
ilon = list(ds.lon.values).index(ds.sel(lon=250.0, method='nearest').lon)
ilat = list(ds.lat.values).index(ds.sel(lat=45.0, method='nearest').lat)
print(' lon index=',ilon,'\n','lat index=', ilat)
Run Code Online (Sandbox Code Playgroud)

生产:

 lon index= 20 
 lat index= 12
Run Code Online (Sandbox Code Playgroud)

为了防止人们想知道为什么要这样做,我们使用它来研究图像的时间堆栈,我们有兴趣选择指定日期的图像之前的图像:

 lon index= 20 
 lat index= 12
Run Code Online (Sandbox Code Playgroud)

产生

848
Run Code Online (Sandbox Code Playgroud)