微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

metpy.calc.dewpoint_from_relative_humity w/ GFS 数据:ValueError:操作数无法与形状一起广播 (31,) (​​34,)

如何解决metpy.calc.dewpoint_from_relative_humity w/ GFS 数据:ValueError:操作数无法与形状一起广播 (31,) (​​34,)

我正在尝试根据 GFS 数据执行 metpy.plots.SkewT()。

当我尝试计算 Td(根据 T、rh)时,压力水平不匹配。

是否有一些聪明的方法(w/ xarray ?)来切片和切块,让它们排成一行?

以下代码在 skew-t 上绘制温度,但是当未注释 metpy.calc.dewpoint_from_relative_warmity 时,它会抱怨:ValueError: 操作数无法与形状 (31,) (​​34,) 一起广播

也欢迎任何有关改进代码提示......

git clone file://path/to/repo

解决方法

通过使用 MetPy 的 XArray accessor 来简化基于“时间”和“垂直”等通用维度的选择,这个过程可以变得更加清晰。我们还可以获取使用 np.intersect1d:

形成的公共级别上的值
import datetime
import metpy
import numpy as np
import xarray

xds0 = xarray.open_dataset('https://thredds.ucar.edu/thredds/dodsC/grib/NCEP/GFS/Global_onedeg/Best')
temp_da = xds0.metpy.parse_cf('Temperature_isobaric')
rh_da = xds0.metpy.parse_cf('Relative_humidity_isobaric')

# Formulate subset
subset0 = {'method' : 'nearest','lon': 238.,'lat': 38.,# Can use 'vertical' here if we pass to metpy's version of sel
           # Use the array of values for pressure that are present in both
           'vertical': np.intersect1d(temp_da.metpy.vertical,rh_da.metpy.vertical),'time': datetime.datetime.utcnow()}

temp = temp_da.metpy.sel(**subset0)
rh = rh_da.metpy.sel(**subset0)

# Need to rename the coordinate on RH to match that of temperature
rh = rh.rename({rh_da.metpy.vertical.name: temp_da.metpy.vertical.name})

# Get vertical coordinate (pressure) as a unitted array
p = temp.metpy.vertical.metpy.unit_array

# Calculate dewpoint
td = metpy.calc.dewpoint_from_relative_humidity(temp,rh)

# Plot on SkewT
skewt1 = metpy.plots.SkewT()

# For some reason matplotlib doesn't like the temp array with units inside
# a DataArray
skewt1.plot(p,temp.metpy.unit_array,'r')
skewt1.plot(p,td,'g')

上面的代码需要 MetPy 1.0 才能原生支持 XArray DataArray。对于早期版本,对 dewpoint_from_relative_humidity 的调用应改为:

td = metpy.calc.dewpoint_from_relative_humidity(temp.metpy.unit_array,rh.metpy.unit_array)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。