在我的站点上,MetPy在尝试调用surface_based_cape_cin 时返回单位错误,这是一个问题
我看到以下错误:
Traceback (most recent call last):
File "Advanced_Sounding_3Dnetcdf2.py", line 202, in <module>
sbcape, sbcin = mpcalc.surface_based_cape_cin(p1, T1, Td1)
File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/xarray.py", line 677, in wrapper
return func(*args, **kwargs)
File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/units.py", line 320, in wrapper
return func(*args, **kwargs)
File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/calc/thermo.py", line 1851, in surface_based_cape_cin
return cape_cin(p, t, td, profile)
File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/xarray.py", line 677, in wrapper
return func(*args, **kwargs)
File "/gpfs/group/kal6112/default/sw/anaconda3/lib/python3.6/site-packages/metpy/units.py", line 319, in wrapper
raise ValueError(msg)
ValueError: `cape_cin` given arguments with incorrect units: `temperature` requires "[temperature]" but given "none", `dewpt` requires "[temperature]" but given "none".
当我检查输入值p1、T1和Td1时,它们都具有正确的单位(hectopascal、degree_Celcius(。
为了确保在调用surface_based_cape_cin:之前,我添加了以下内容并检查了结果
p1 = units.hPa * phPa
T1 = units.degC * TdegC
Td1 = units.degC * TddegC
我正在运行以下版本的MetPy
# Name Version Build Channel
metpy 0.12.2 py_0 conda-forge
我不记得在更新到这个版本之前有过这种情况,但我不能确定我看到的问题是否在更新后出现。
感谢您提供的任何帮助。
这肯定是MetPy中的一个错误,可能是由于屏蔽数组和保留单元带来的更多挑战。我新开了一期。与此同时,作为一种变通方法,最好用之类的东西来消除屏蔽的阵列
p1 = p1.compressed() * p1.units
T1 = T1.compressed() * T1.units
Td1 = Td1.compressed() * Td1.units
只要数据没有实际屏蔽值,或者如果所有3个阵列都在同一点屏蔽,这将起作用。如果没有,您将需要做更多的工作来删除其中一个值被屏蔽的任何级别。