0

我按照此处的示例(https://unidata.github.io/python-gallery/examples/Precipitation_Map.html)但是在尝试访问单位时出现维度错误。我假设这与pint它解析单位的方式和降水量是一个速率有关。任何帮助,将不胜感激

%matplotlib inline
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import metpy
import datetime
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from xarray.backends import NetCDF4DataStore
import xarray as xr
import numpy as np
from metpy.units import masked_array, units
from siphon.catalog import TDSCatalog



best_gfs = TDSCatalog('http://thredds.ucar.edu/thredds/catalog/grib/NCEP/GFS/'
                      'Global_0p25deg/catalog.xml?dataset=grib/NCEP/GFS/Global_0p25deg/Best')
best_gfs.datasets


best_ds = list(best_gfs.datasets.values())[0]
ncss = best_ds.subset()

query = ncss.query()
query.lonlat_box(-66.243114,-25.762908,-28.708933, -2.191886).time_range(datetime.datetime.utcnow(), datetime.datetime.utcnow() + datetime.timedelta(days=10))
query.accept('netcdf4')
query.variables('Precipitation_rate_surface')
data = ncss.get_data(query)
data = xr.open_dataset(NetCDF4DataStore(data))

lon_2d, lat_2d = np.meshgrid(data['lon'], data['lat'])
precip = data['Precipitation_rate_surface']

precip.metpy.units
4

1 回答 1

0

这是因为该变量的单位字符串是kg.m-2.s-1,这是一个与 UDUnits 兼容的字符串,但不适用于 Pint 中的默认单位解析器,这是 MetPy 用于单位支持的。

这在 MetPy 1.0 中已修复。您可以使用 conda 安装 MetPy 1.0 的第二个候选版本:

conda install -c conda-forge/label/metpy_rc metpy=1.0

或使用点子:

pip install --pre metpy=1.0

MetPy < 1.0 的解决方法是在调用之前覆盖单位元数据precip.metpy.units

precip.attrs['units'] = 'kg m^-2 s^-1'
于 2020-10-19T17:20:54.350 回答