Python气象数据处理中的数值微分和积分法——其二
2023-05-09 22:36 作者:Unlim-Succession | 我要投稿
1.3 一般情况下的微分
对于一般情况下的微分计算,Numpy和Metpy模块等都提供了函数,这里我们以水平散度为例,差分形式的表达式为
1.3.1 Numpy(推荐)
Numpy模块提供了计算差分的函数numpy.gradient(f, axis, …),主要参数为
f:一个N维数组;
axis:f沿着axis的方向做差分。
返回f的差分,大小与f相同。
主要编程思路如下(三维数据):
1.3.2 Metpy
Metpy模块也提供了类似的函数metpy.calc.gradient(f, …),主要参数为
f:一个N维的数组,格式为dataarray时可以不填其他参数。
函数会识别f的坐标,返回其梯度,大小与f相同。
主要编程思路如下(三维数据):
综上,Metpy在差分时可能会自动对坐标进行变化,比如将经纬度变换为长度、将时间单位转为秒等;而Numpy仅做数值计算,需要自行变换坐标。Metpy虽然代码简单,但容易出错,更推荐使用Numpy计算差分。
2 数值积分法
Numpy、Xarray模块等提供了计算数值积分的函数,这里推荐Xarray的(简便且不易出错),以整层散度为例,表达式为
Xarray自带的积分函数是基于梯形法则,如果积分轴上坐标密度较高,结果与样条法等应该差别不大。主要编程思路如下:
使用这个函数需要提前截取积分范围内的数据,因为函数不能选定积分范围;另外,如果对于空白的值(如地形以下的部分)需要设置为0,如果设置为nan,则积分结果也为nan(与NCL不同)。
That's all.