- 积分
- 17497
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2015-4-23
- 最后登录
- 1970-1-1
![[贫道敬孔称老衲] 粉丝数:3 微博数:41 新浪微博达人勋](source/plugin/sina_login/img/light.png)
|
本帖最后由 贫道敬孔 于 2025-3-10 20:49 编辑
垂直积分:
python中numpy和scipy的计算垂直积分的效果相同:
p = T['level'].metpy.quantify() * 100 * units.Pa # 假设level单位为hPa(p一定要乘以100!化为帕!!)
Q1_integrated = np.trapz( Q1, p, axis=0 ) / g # 这里p即x=p的简写;与不乘以100即hPa的结果相同
Q2_integrated = np.trapz( Q2, p, axis=0 ) / g
与
from scipy import integrate
Q1_integrated = integrate.trapezoid(Q1, p, axis=0) / g # 这里p亦即x=p的简写;与不乘以100即hPa的结果相同
Q2_integrated = integrate.trapezoid(Q2, p, axis=0) / g
二者计算结果一模一样,当然,scipy还有一个integrate.simpson,与二者的计算结果近似,但是值稍微有点差别。
至于dataarray的直接积分,即
Q1 = xr.DataArray(Q1, coords=u.coords, dims=u.dims)
Q2 = xr.DataArray(Q2, coords=u.coords, dims=u.dims)
Q1_integrated = Q1.integrate("level") / g
Q2_integrated = Q2.integrate("level") / g
则算出的结果非常之小,要小两个量级,不知为何(可能是积分直接对百帕而不是帕?但是一个DataArray已经定义好了维度的名称(如level),又该如何修改呢?)。所以推荐前两个。
以方便程度来说推荐第一个即np.trapz
注:最新的numpy已将np.trapz经更新为np.trapezoid,二者调用和计算结果相同,注意版本即可。老一点的numpy兼容性高一点,np.trap好用的。
|
|