【篇外话-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 后查看