我正在尝试使用xarray,但是我遇到了麻烦。
特别是因为我试图使其与不规则的纬度网格一起工作。
我在 lat / lon 网格上有一个带变量的netCDF文件,这里是slp。加载时会给我以下信息:
<xarray.Dataset>
Dimensions: (Time: 61375, lat: 81, lon: 81)
Dimensions without coordinates: Time, lat, lon
Data variables:
sea_level_pres (Time, lat, lon) float64 ...
到目前为止,一切都很好。现在,我想添加我的不规则纬度网格作为坐标。我尝试了以下方法:
slp["latc"] = (("lat","lon"),coord.XLAT.values.squeeze())
slp["lonc"] = (("lat","lon"),coord.XLONG.values.squeeze())
slp.set_coords("lonc")
slp.set_coords("latc")
coord是另一个netCDF,其中描述了我的不规则网格。现在我得到以下信息:
<xarray.Dataset>
Dimensions: (Time: 61375, lat: 81, lon: 81)
Coordinates:
latc (lat, lon) float32 34.69266 34.73062 ... 54.56264 54.51206
lonc (lat, lon) float32 -7.4926453 -7.1955566 ... 21.634521
Dimensions without coordinates: Time, lat, lon
Data variables:
sea_level_pres (Time, lat, lon) float64 ...
在我看来,这是处理不规则网格的最便捷方法:具有物理坐标和索引坐标。
但是在这里,我不确定自己做的是否正确,因为当我尝试根据物理纬度和经度进行子集化时,我永远都做不到:
lat_bnd = [35,40]
slp.sel(lat=slice(*lat_bnd))
礼物:
<xarray.Dataset>
Dimensions: (Time: 61375, lat: 5, lon: 81)
Coordinates:
latc (lat, lon) float32 43.30759 43.35192 ... 44.46182 44.41968
lonc (lat, lon) float32 -9.37085 -9.030823 ... 18.309692 18.65686
Dimensions without coordinates: Time, lat, lon
Data variables:
sea_level_pres (Time, lat, lon) float64 ...
所以我似乎要对索引进行切片,而不是对我的经度和纬度进行分类……而是类似:
slp.sel(latc=slice(*lat_bnd))
引发以下错误:
ValueError: dimensions or multi-index levels ['latc'] do not exist
任何有助于您理解的帮助:)
谢谢!