为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白衣染霜花 2022-10-25 14:55:56
我有一个 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-01Data 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] 但我不确定这是否是正确的方法。我怎样才能“正确”地做到这一点?
查看完整描述

2 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

我同意找到与.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


查看完整回答
反对 回复 2022-10-25
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

我认为这样的事情应该有效:


ds = xr.tutorial.open_dataset('air_temperature')

idx = ds.indexes["time"].get_loc('2013-06-01 00:00:00',  method="nearest")

print(idx)


查看完整回答
反对 回复 2022-10-25
  • 2 回答
  • 0 关注
  • 61 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信