【问题标题】:Metpy mpcalc.absolute_vorticity() with incompatible grids网格不兼容的 Metpy mpcalc.absolute_vorticity()
【发布时间】:2021-07-21 17:26:44
【问题描述】:

我正在尝试关注 this training example 以计算 NCEP/NCAR 数据上的 QG omega,但我正在挂断 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,) 

【问题讨论】:

  • 查看完整的错误回溯,而不仅仅是最后一个错误,这样可以真正看到失败的行,这将非常有帮助。
  • 抱歉最初没有包含,现在包含完整的错误回溯。

标签: python metpy


【解决方案1】:

如果无法访问数据或完全错误,我的猜测是问题在于 lats 没有正确的形状来遵守 NumPy 的broadcasting rules。尝试更改为:

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

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

【讨论】:

    猜你喜欢
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 2013-08-31
    • 2020-02-17
    相关资源
    最近更新 更多