首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有不兼容网格的Metpy mpcalc.absolute_vorticity()

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

Stack Overflow用户
提问于 2021-07-22 01:26:44
回答 1查看 43关注 0票数 2

我试图跟随this training example在NCEP/NCAR数据上计算QGω,但我在mpcalc.absolute_vorticity上挂了。

代码语言:javascript
复制
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,)“。

完整的错误回溯如下:

代码语言:javascript
复制
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,) 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-22 05:58:17

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

代码语言:javascript
复制
avort = mc.absolute_vorticity(u700, v700, dx, dy, lats[:, None])

从本质上讲,拖尾尺寸需要对齐。在此之前,NumPy尝试将73 (lats)与lons维度(144)对齐。添加[:, None]将创建一个大小为-1的维度作为lats的最后一个维度,然后对齐尝试将形状(73,1)与(73,144)匹配,这是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68474039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档