网格不兼容的 Metpy mpcalc.absolute_vorticity()

Metpy mpcalc.absolute_vorticity() with incompatible grids

我正在尝试按照 this training example 计算 NCEP/NCAR 数据的 QG 欧米茄,但我在 mpcalc.absolute_vorticity.

上挂断了
import xarray as xr
import metpy.calc as mc
import metpy.constants as mpconstants
from metpy.units import units
import numpy as np

path='./'
uf = 'uwnd.2018.nc'
vf = 'vwnd.2018.nc'
af = 'air.2018.nc'

ads = xr.open_dataset(path+af).metpy.parse_cf()
uds = xr.open_dataset(path+uf).metpy.parse_cf()
vds = xr.open_dataset(path+vf).metpy.parse_cf()

a700 = ads['air'].metpy.sel(
        level=700 * units.hPa,
        time='2018-01-04T12')
u700 = uds['uwnd'].metpy.sel(
        level=700 * units.hPa,
        time='2018-01-04T12')
v700 = vds['vwnd'].metpy.sel(
        level=700 * units.hPa,
        time='2018-01-04T12')

lats = ads['lat'].metpy.unit_array
lons = ads['lon'].metpy.unit_array
X, Y = np.meshgrid(lons,lats)
dx, dy = mc.lat_lon_grid_deltas(lons,lats)

avort = mc.absolute_vorticity(u700,v700,dx,dy,lats)

我收到错误消息“ValueError:操作数无法与形状 (73,144) (73,) 一起广播”。

完整的错误回溯如下:

Traceback (most recent call last):
  File "metpy.decomp.py", line 43, in <module>
    avort = mc.absolute_vorticity(u700,v700,dx,dy,lats) 
  File "/work1/jsa/anconda3/envs/earth/lib/python3.7/site-packages/metpy/xarray.py", line 570, in wrapper
    return func(*args, **kwargs)
  File "/work1/jsa/anconda3/envs/earth/lib/python3.7/site-packages/metpy/units.py", line 312, in wrapper
    return func(*args, **kwargs)
  File "/work1/jsa/anconda3/envs/earth/lib/python3.7/site-packages/metpy/calc/kinematics.py", line 639, in absolute_vorticity
    return relative_vorticity + f
  File "/work1/jsa/anconda3/envs/earth/lib/python3.7/site-packages/pint/quantity.py", line 754, in __add__
    return self._add_sub(other, operator.add)
  File "/work1/jsa/anconda3/envs/earth/lib/python3.7/site-packages/pint/quantity.py", line 75, in wrapped
    result = f(self, *args, **kwargs)
  File "/work1/jsa/anconda3/envs/earth/lib/python3.7/site-packages/pint/quantity.py", line 686, in _add_sub
    magnitude = op(self._magnitude, other._magnitude)
ValueError: operands could not be broadcast together with shapes (73,144) (73,) 

在没有访问数据或完整错误的情况下,我的猜测是问题在于 lats 没有正确的形状来服从 NumPy 的 broadcasting rules。尝试更改为:

avort = mc.absolute_vorticity(u700, v700, dx, dy, lats[:, None])

基本上,尾随尺寸需要对齐。之前,NumPy 试图将 73(纬度)与经度维度 (144) 对齐。添加 [:, None] 创建一个大小为 1 的维度作为 lats 的最后一个维度,然后对齐尝试将形状 (73, 1) 与 (73, 144) 匹配,这有效。