我试图跟随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,) 发布于 2021-07-22 05:58:17
如果没有访问数据或完全错误,我猜问题是lats没有正确的形状来遵守NumPy的broadcasting rules。尝试更改为:
avort = mc.absolute_vorticity(u700, v700, dx, dy, lats[:, None])从本质上讲,拖尾尺寸需要对齐。在此之前,NumPy尝试将73 (lats)与lons维度(144)对齐。添加[:, None]将创建一个大小为-1的维度作为lats的最后一个维度,然后对齐尝试将形状(73,1)与(73,144)匹配,这是可行的。
https://stackoverflow.com/questions/68474039
复制相似问题