MATLAB计算连续月份的不同栅格数据间的相关系数(输出为tif影像)

应广大小伙伴要求,此文章附上完整代码。

大家使用的时候注意修改目录及文件名称,以及选择合适的相关性方法等。

这里我只选了每年的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);

以上分享给大家,仅供参考和学习,欢迎大家多多交流!

根据提供的引用内容,我们可以了解到如何在SPSS软件中计算皮尔逊相关系数,以及如何在Matlab中读取数据。下面是在Matlab计算多个栅格的皮尔逊相关系数的方法: 1. 首先,我们需要将多个栅格数据读入Matlab中。假设我们有两个栅格数据,分别为A和B,可以使用ncread函数读取nc格式的数据文件,例如: ```matlab A = ncread('file_A.nc', 'var_A'); B = ncread('file_B.nc', 'var_B'); ``` 2. 接下来,我们需要将A和B的数据转换为向量形式,以便计算皮尔逊相关系数。可以使用reshape函数将栅格数据转换为向量,例如: ```matlab A_vec = reshape(A, [], 1); B_vec = reshape(B, [], 1); ``` 3. 然后,我们可以使用Matlab内置的corr函数计算A和B的皮尔逊相关系数,例如: ```matlab r = corr(A_vec, B_vec); ``` 这将返回A和B的皮尔逊相关系数r。 4. 如果我们有多个栅格数据,可以使用循环来计算它们之的皮尔逊相关系数。例如,假设我们有n个栅格数据,可以使用以下代码: ```matlab % 读取n个栅格数据 for i = 1:n data{i} = ncread(['file_', num2str(i), '.nc'], ['var_', num2str(i)]); end % 将数据转换为向量形式 for i = 1:n data_vec{i} = reshape(data{i}, [], 1); end % 计算皮尔逊相关系数 r = zeros(n); for i = 1:n for j = i+1:n r(i,j) = corr(data_vec{i}, data_vec{j}); end end ``` 这将返回一个n×n的矩阵r,其中r(i,j)表示第i个栅格数据和第j个栅格数据的皮尔逊相关系数
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值