为了在python中重写ncl的decompose2SymAsym函数
将关于赤道对称的变量分解为对称和不对称部分。
名义上,输入x被划分如下:
具体数学解释是:对于任一定义在纬度上的场 x(lat),它都可以分解为对称(偶函数)部分和反对称(奇函数)部分。
这个部分满足,,即关于赤道对称。
这个部分满足,,即关于赤道反号。
1、选择对应的正纬度:对于每一个正纬度lat>0,找到其对应的负纬度-lat。
2、计算对称部分:
因为对称,所以可以只在一侧存储以上平均值,这部分比较简单。
3、计算反对称部分:
同样,对于正纬度点,计算:
反对称部分在正纬度为正,在负纬度则符号相反;因此,可以只在正纬度(例如北半球的 lat 点)存储这一部分。
4、恢复完整场
当需要重新构造原始场时,可以利用下式:
def decompose2SymAsym(X):
(ntim,nlat,nlon) = X.shape
res = np.copy(X)
for i in range(nlat//2):
print(i,nlat-1-i)
# symmetric part in the Southern Hemisphere
res[:,i,:] = 0.5*(X[:,nlat-1-i,:] + X[:,i,:])
# antisymmetric part in the Northern Hemisphere
res[:,nlat-1-i,:] = 0.5*(X[:,nlat-1-i,:] - X[:,i,:])
return res
将python的计算结果与ncl的结果进行对比,可以发现非常的一致。
唯一需要注意的是,当lat包含赤道时,通常不处理赤道的数据。