将单位属性添加到xarray对象

我创建了一系列等压压力水平以绘制横截面:

vertical,= cross['isobaric'].metpy.coordinates('vertical')

但是,此数组具有以Pa为单位的值。要转换为hPa,我创建了一个新数组:

vert_hpa = (vertical/100)*units.hPa

然后我要用它来计算潜在温度:

temperature,pressure,relative_humidity = xr.broadcast(cross['temperature'],vert_hpa,cross['relative_humidity'])
theta = mpcalc.potential_temperature(pressure,temperature)

当我尝试运行此命令时,出现错误提示我创建并分配给变量'pressure'的数组没有任何关联的单位:

ValueError: `potential_temperature` given arguments with incorrect units: `pressure` requires "[pressure]" but given "dimensionless".

MetPy units documentation建议可以使用语法array_name * units.unit将单位添加到数组。为什么我这样做的尝试没有成功?

fangquans 回答:将单位属性添加到xarray对象

您遇到的问题是乘法单元只能用于numpy数组,而不能用于xarray.DataArray实例,这是在您获得vertical时得到的结果。如果不是这样,那会很好,但是目前这就是我们生活的世界。要解决这个MetPy,有一些xarray and units有用的工具。

但是,在这种情况下,无需将单位从Pa手动转换为hPa -只要知道单位并且尺寸合适,potential_temperature就不会影响单位支持关心它们是什么。这就是我编写您的代码的方式:

vertical = data['temperature'].metpy.vertical
temperature,pressure,relative_humidity = xr.broadcast(data['temperature'],vertical,data['relative_humidity'])
theta = mpcalc.potential_temperature(pressure,temperature)

供以后参考,如果您确实需要使用xarray并将其转换为仅附加了单位的裸numpy数组,则可以使用unit_array属性:

temp_with_units = temperature.metpy.unit_array
本文链接:https://www.f2er.com/2580914.html

大家都在问