如何找到与特定选择的 xarray 等效的索引?
How can I find the indices equivalent to a specific selection of 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)>
找到最近的经纬度
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]
但我不确定这样做是否正确。我该怎么做 'correctly'?
我同意查找与 .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)
生产:
lon index= 20
lat index= 12
为了以防万一有人想知道为什么要这样做,我们用它来研究图像的时间堆栈,我们有兴趣立即选择图像前面指定日期的图像:
import xarray as xr
ds = xr.tutorial.open_dataset('air_temperature')
ilon = list(ds.time.values).index(ds.sel(time='2013-06-01 00:00:00', method='nearest').time)
print(idx)
产生
848
我认为类似的东西应该有用:
ds = xr.tutorial.open_dataset('air_temperature')
idx = ds.indexes["time"].get_loc('2013-06-01 00:00:00', method="nearest")
print(idx)
我有一个 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)>
找到最近的经纬度
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]
但我不确定这样做是否正确。我该怎么做 'correctly'?
我同意查找与 .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)
生产:
lon index= 20
lat index= 12
为了以防万一有人想知道为什么要这样做,我们用它来研究图像的时间堆栈,我们有兴趣立即选择图像前面指定日期的图像:
import xarray as xr
ds = xr.tutorial.open_dataset('air_temperature')
ilon = list(ds.time.values).index(ds.sel(time='2013-06-01 00:00:00', method='nearest').time)
print(idx)
产生
848
我认为类似的东西应该有用:
ds = xr.tutorial.open_dataset('air_temperature')
idx = ds.indexes["time"].get_loc('2013-06-01 00:00:00', method="nearest")
print(idx)