如何处理UndefinedUnitError?

费曼·谢尔(Feynmen Sher)

我从noaa下载了数据,我想使用函数vertical_velocity = metpy.calcmpcalc.vertical_velocity(omega,pressure,temperature)计算垂直速度但是当我处理变量单位时出了点问题。

import xarray as xr
import metpy.calc as mpcalc
omega=xr.open_dataset('D:\\data_english\\jwk\\omega.mon.mean.nc')

temperature=xr.open_dataset('D:\\data_english\\jwk\\air.mon.mean.nc')

height=xr.open_dataset('D:\\data_english\\jwk\\hgt.mon.mean.nc')

pressure=mpcalc.height_to_pressure_std(height['hgt'])

verticalwind=mpcalc.vertical_velocity(omega['omega'], pressure, temperature['air'])


Traceback (most recent call last):
  File "<ipython-input-194-da22b63a1943>", line 1, in <module>
    verticalwind=mpcalc.vertical_velocity(omega['omega'], pressure, temperature['air'])
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 1199, in wrapper
    _mutate_arguments(bound_args, xr.DataArray, lambda arg, _: arg.metpy.unit_array)
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 1233, in _mutate_arguments
    bound_args.arguments[arg_name] = mutate_arg(arg_val, arg_name)
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 1199, in <lambda>
    _mutate_arguments(bound_args, xr.DataArray, lambda arg, _: arg.metpy.unit_array)
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 157, in unit_array
    return units.Quantity(self._data_array.data, self.units)
  File "D:\anaconda\lib\site-packages\metpy\xarray.py", line 134, in units
    return units.parse_units(self._data_array.attrs.get('units', 'dimensionless'))
  File "D:\anaconda\lib\site-packages\pint\registry.py", line 1084, in parse_units
    units = self._parse_units(input_string, as_delta)
  File "D:\anaconda\lib\site-packages\pint\registry.py", line 1298, in _parse_units
    return super()._parse_units(input_string, as_delta)
  File "D:\anaconda\lib\site-packages\pint\registry.py", line 1112, in _parse_units
    cname = self.get_name(name)
  File "D:\anaconda\lib\site-packages\pint\registry.py", line 636, in get_name
    raise UndefinedUnitError(name_or_alias)
UndefinedUnitError: 'Pascal' is not defined in the unit registry

**欧米茄,高度和温度的单位分别为“帕斯卡/秒”,“米”和“摄氏度”。可变压力是通过函数mpcalc.height_to_pressure_std计算的,该函数未给出压力单位。但是压力值的范围是1000到0,因此我认为其单位是“ hpa”。

该错误报告“单元注册表中未定义'Pascal'”。也许“ Pascal / s”不是欧米茄的默认单位吗?但是我怎么知道单元注册表中定义了哪些单元?谁能帮我?谢谢!**

多普勒频移

当MetPy使用的单位库(Pint)与netCDF Climate and Forecasting Conventions针对元数据使用的UDUnits格式没有相同的关于大小写/区分大小写的规则时,这是一个问题。解决此问题的方法已在MetPy的待办事项清单上,但遇到了一些障碍。

现在的解决方法是将您的单位更改为Pint可以理解的内容,例如:

omega['omega'].attrs['units'] = 'pascal / s'

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章