MetPy suface_based_cape_cin 返回单位错误
MetPy suface_based_cape_cin returning error with units
在我的网站上,我们在尝试调用 surface_based_cape_cin
时遇到 MetPy 返回单位错误的问题
我看到以下错误:
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 时,它们的单位都是正确的(百帕,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 中的一个错误,可能是由于屏蔽数组和保留单元的更多挑战。我打开了 a new issue。与此同时,作为 work-around,最好只用类似以下内容的方式消除屏蔽数组:
p1 = p1.compressed() * p1.units
T1 = T1.compressed() * T1.units
Td1 = Td1.compressed() * Td1.units
只要数据没有实际的屏蔽值,或者如果所有 3 个数组都在同一位置屏蔽,这将起作用。如果不是,您将需要做一些更多的工作来删除其中一个值被屏蔽的任何级别。
在我的网站上,我们在尝试调用 surface_based_cape_cin
时遇到 MetPy 返回单位错误的问题我看到以下错误:
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 时,它们的单位都是正确的(百帕,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 中的一个错误,可能是由于屏蔽数组和保留单元的更多挑战。我打开了 a new issue。与此同时,作为 work-around,最好只用类似以下内容的方式消除屏蔽数组:
p1 = p1.compressed() * p1.units
T1 = T1.compressed() * T1.units
Td1 = Td1.compressed() * Td1.units
只要数据没有实际的屏蔽值,或者如果所有 3 个数组都在同一位置屏蔽,这将起作用。如果不是,您将需要做一些更多的工作来删除其中一个值被屏蔽的任何级别。