应广大小伙伴要求,此文章附上完整代码。
大家使用的时候注意修改目录及文件名称,以及选择合适的相关性方法等。
这里我只选了每年的3-5月作分析,如果是12月需要修改month的循环。
%先导入投影信息,某个影像的路径就行(最好是你分析的数据中的一个)
[a,R]=readgeoraster('E:\Correlation\Pgrw\grw\200302.tif');
info=geotiffinfo('E:\Correlation\Pgrw\grw\200302.tif');
[m,n]=size(a);
i=1;
gw=zeros(m*n,51);
%此处要修改,共多少个月就写多少个月,我这里一共51个月,gw是我自己的变量名,可以根据需求修改
for year=2003:2017
for month=3:5
filename=strcat('E:\Correlation\Pgrw\grw\',int2str(year),'0',int2str(month),'.tif');
%上述是文件名字的写法,我这里的例子是YYYYMM,根据自己文件命名修改
data=importdata(filename);
data=reshape(data,m*n,1);
gw(:,i)=data;
i=i+1;
end
end
for year=2019:2020 %因为我没有2018年数据,就跳过了
for month=3:5
filename=strcat('E:\Correlation\Pgrw\grw\',int2str(year),'0',int2str(month),'.tif');
data=importdata(filename);
data=reshape(data,m*n,1);
gw(:,i)=data;
i=i+1;
end
end
% 可以看出每一年只挑选3-5月份的数据,用的双层循环,如果是每年的十二个月,就month=1:12
i=1; %前面一个参数,下面导入另一个参数rssm,这里需要重新命i=1!
rssm=zeros(m*n,51);
for year=2003:2017
for month=3:5
filename=strcat('E:\Correlation\SMgrw\sm\',int2str(year),'0',int2str(month),'.tif');
data=importdata(filename);
data=reshape(data,m*n,1);
rssm(:,i)=data;
i=i+1;
end
end
for year=2019:2020
for month=3:5
filename=strcat('E:\Correlation\SMgrw\sm\',int2str(year),'0',int2str(month),'.tif');
data=importdata(filename);
data=reshape(data,m*n,1);
rssm(:,i)=data;
i=i+1;
end
end
%求相关性和显著性
grw_sm_xgx=zeros(m,n);
grw_sm_p=zeros(m,n);
for tl=1:length(gw) %tl=timeline 时间长度,其实就是前面的51.
grw=gw(tl,:);
ssm=rssm(tl,:);
[r2,p2]=corr(grw',ssm','type',"Pearson");
%这里可以选自己想要的相关性,有三种。常用Pearson
grw_sm_xgx(tl)=r2;
grw_sm_p(tl)=p2;
end
filename1='E:\Correlation\SMgrw\相关性.tif'; %相关性
filename2='E:\Correlation\SMgrw\显著性.tif'; %显著性
%输出图像
geotiffwrite(filename1,grw_sm_xgx,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);
geotiffwrite(filename2,grw_sm_p,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);
以上分享给大家,仅供参考和学习,欢迎大家多多交流!