基于Python的格点相关性分析和趋势分析改进版

发布于:2022-08-05 ⋅ 阅读:(401) ⋅ 点赞:(0)

【篇外话-INUYASHA123】在此之前我们基于netCDF这样的高维度数据进行了相关性分析和趋势分析,主要使用了两种方法途径第一是基于xskillscore这个库,第二是通过遍历nc数据的经纬格点。这两种方法各有它们的优缺点。比如xskillscore虽然方便调用,但是需要数据没有NaN值,另外,如果是用GIS生产的nc文件去做分析会导致lon-lat增加一倍的现象。而第二种使用循环的方法,针对数据量大的将十分缓慢,因此有必要探索新的更加高效的方法来处理。

为了更好地方便相关研究者运用,于是决定将最近所测试的Python脚本共享出来,可以无限制用于研究工作。第一部分是我之前测试的部分,基于循环的相关性分计算分析;第二部分是郑化毅同学改进版的相关性计算和趋势分析,这个方法的更加精简省时。

So,搞定,希望你可以将知识与技术更好地传播出去!

基本上相关性分析和趋势分析的内容也就差不多搞定了,deliciously perfect!

首先是基于循环的相关性计算分析,脚本如下:

 

import xarray as xr
import numpy as np
import  warnings
warnings.filterwarnings( "ignore" )
from scipy import stats

def corr_3d(x,y):
    nlat=y.shape[1]
    nlon=y.shape[2]
    corr=np.full([nlat,nlon],np.nan)
    pval=np.full([nlat,nlon],np.nan)
    for i in range(nlat):
        for j in range(nlon):
            if np.isnan(y[0,i,j]) or np.isnan(x[0,i,j]):
                continue
            else:
                r,p=stats.pearsonr(x[:,i,j],y[:,i,j])
                corr[i,j]=r
                pval[i,j]=p
    lat = y.coords['lat']
    lon = y.coords['lon']
    corr=xr.DataArray(corr,coords=[lat,lon],dims=['latitude','longitude'])
    pval=xr.DataArray(pval,coords=[lat,lon],dims=['latitude','longitude'])
    return corr,pval

var = xr.open_dataset('./var.nc')
tmp = xr.open_dataset('./tmp.nc')

corr,pval=corr_3d(var['X'],tmp['tmp'])
corr.to_netcdf('./V_tmp_corr.nc')
pval.to_netcdf('./V_tmp_pva.nc')

得到结果

详细的结果请到公众号查看了吧:基于Python的相关性分析和趋势分析改进版

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到