使用 XArray.isel 从特定位置访问 GRIB2 文件中的数据?
Using XArray.isel to access data in GRIB2 file from a specific location?
我正在尝试访问特定经度和纬度的 GRIB2 文件中的数据。我一直在关注本教程 (https://www.youtube.com/watch?v=yLoudFv3hAY) 大约 2:52 但是我的 GRIB 文件的格式与示例不同并且使用了不同的变量
import xarray as xr
import pygrib
ds=xr.open_dataset('testdata.grb2', engine='cfgrib', filter_by_keys={'typeOfLevel': 'heightAboveGround', 'topLevel':2})
ds
这会打印:
<xarray.Dataset>
Dimensions: (latitude: 361, longitude: 720)
Coordinates:
time datetime64[ns] ...
step timedelta64[ns] ...
heightAboveGround float64 ...
* latitude (latitude) float64 90.0 89.5 89.0 ... -89.0 -89.5 -90.0
* longitude (longitude) float64 0.0 0.5 1.0 1.5 ... 358.5 359.0 359.5
valid_time datetime64[ns] ...
Data variables:
t2m (latitude, longitude) float32 ...
sh2 (latitude, longitude) float32 ...
r2 (latitude, longitude) float32 ...
然后我尝试使用 imshow 沿纬度和经度 (t2m?) 维度建立索引:
t0_ds = ds.isel(t2m={200,200})
这给出了这个错误:
ValueError: Dimensions {'t2m'} do not exist. Expected one or more of Frozen({'latitude': 361, 'longitude': 720})
显然我使用 isel 的方式存在错误,但我尝试了很多变体,但我找不到关于这个特定错误的更多信息
您可以使用以下方法访问最接近特定 latitude/longitude 的数据点:
lat = #yourlatitude
lon = #yourlongitude
ds_loc = ds.sel(latitude = lat, longitude = lon, method = 'nearest')
isel用于按索引访问点,即:
ds_loc = ds.isel(latitude = 200)
将 return 沿第 200 个纬度值的子集。
我正在尝试访问特定经度和纬度的 GRIB2 文件中的数据。我一直在关注本教程 (https://www.youtube.com/watch?v=yLoudFv3hAY) 大约 2:52 但是我的 GRIB 文件的格式与示例不同并且使用了不同的变量
import xarray as xr
import pygrib
ds=xr.open_dataset('testdata.grb2', engine='cfgrib', filter_by_keys={'typeOfLevel': 'heightAboveGround', 'topLevel':2})
ds
这会打印:
<xarray.Dataset>
Dimensions: (latitude: 361, longitude: 720)
Coordinates:
time datetime64[ns] ...
step timedelta64[ns] ...
heightAboveGround float64 ...
* latitude (latitude) float64 90.0 89.5 89.0 ... -89.0 -89.5 -90.0
* longitude (longitude) float64 0.0 0.5 1.0 1.5 ... 358.5 359.0 359.5
valid_time datetime64[ns] ...
Data variables:
t2m (latitude, longitude) float32 ...
sh2 (latitude, longitude) float32 ...
r2 (latitude, longitude) float32 ...
然后我尝试使用 imshow 沿纬度和经度 (t2m?) 维度建立索引:
t0_ds = ds.isel(t2m={200,200})
这给出了这个错误:
ValueError: Dimensions {'t2m'} do not exist. Expected one or more of Frozen({'latitude': 361, 'longitude': 720})
显然我使用 isel 的方式存在错误,但我尝试了很多变体,但我找不到关于这个特定错误的更多信息
您可以使用以下方法访问最接近特定 latitude/longitude 的数据点:
lat = #yourlatitude
lon = #yourlongitude
ds_loc = ds.sel(latitude = lat, longitude = lon, method = 'nearest')
isel用于按索引访问点,即:
ds_loc = ds.isel(latitude = 200)
将 return 沿第 200 个纬度值的子集。