我有一个3D数据(气候变量),(x=33,y=35,z=27),其中x,y是指网格点,z是时间(以年为单位)。我需要给定时间段的网格RMSE。在计算RMSE之前,我必须屏蔽该文件。掩码文件和数据的维度相同(包括时间)。没有。在掩蔽之后,必须找到RMSE的网格的数量减少(33*35=1155为357)。在重塑原始数据后,我找到了这些简化网格的RMSE。现在我有一个RMSE (357*1)的列矩阵,它必须以2维的形式显示,即对于各个网格(33*35)。如何实现从一维小数组到二维大数组的重塑?我的代码是:
IMD_load=load('IMD.mat'); % mask file cum observation data
IMD1=IMD_load.IMD_OBS;
IMD(:,:,:)=IMD1(:,:,1:27); % I'm doing only for 27 yrs of available time period
CFS_load=load('CFS.mat'); % model data
CFS1=CFS_load.CFSV2;
CFS2=CFS1(:,:,1:27); % I'm doing only for 27 yrs of available time period
CFS=CFS2-273.15;
for i = 1:1:27
IMD2=IMD(:,:,i);
IMD_1=reshape(IMD2,1155,1);
IMD_1(isnan(IMD_1))=0;
[IMD_m]=find(IMD_1==0);
% CFS3=CFS(:,:,i);
CFS4=reshape(CFS(:,:,i),1155,1);
CFS4(IMD_m,:)=0;
CFS5=reshape(CFS4,1155,1);
CFS6(:,i)=CFS5;
end%I必须运行上面的for循环,因为对于每一年没有。使用NaN的网格的数量是不同的
OO1=reshape(IMD,1155,27);
MM1=reshape(CFS,1155,27);
OO2=reshape(OO1,1155*27,1); % is this corret?
MM2=reshape(MM1,1155*27,1); % is this corret?
[cfs6_m]=find(CFS6~=0);
[cfs6_m2]=find(CFS6==0);
OO3=reshape(OO2(cfs6_m,:),357,27); % (OR) OO4=reshape(OO2(cfs6_m),357,27);
MM3=reshape(MM2(cfs6_m,:),357,27); % (OR) MM4=reshape(MM2(cfs6_m),357,27);
for i = 1:1:357
r2(i,:)=sqrt(sum((OO3(i,:)-MM3(i,:)).^2)/27);
end
% RR(1155,1)=reshape(R,33,35);%I现在只剩下'r1'(357*1)。但是如何将其转换回33*35?
发布于 2013-09-09 18:24:31
以下内容不起作用吗?
temp=reshape(R,33,35);
RR(1155,1)=temp;发布于 2013-09-10 11:45:51
我的朋友建议我使用三个for循环的传统方法。现在我的问题已经解决了。但您可以建议使用更高效、更紧凑的代码。我的代码如下所示。如果你发现它有什么问题,请告诉我。
IMD_load=load('IMD.mat');
IMD1=IMD_load.IMD_OBS;
IMD(:,:,:)=IMD1(:,:,1:27);
CFS_load=load('CFSV2.mat');
CFS1=CFS_load.CFSV2;
CFS2=CFS1(:,:,1:27);
CFS=CFS2-273.15;
for i = 1:1:27
IMD2=IMD(:,:,i);
IMD_1=reshape(IMD2,1155,1);
IMD_1(isnan(IMD_1))=0;
[IMD_m]=find(IMD_1==0);
% CFS3=CFS(:,:,i);
CFS4=reshape(CFS(:,:,i),1155,1);
CFS4(IMD_m,:)=0;
CFS5=reshape(CFS4,1155,1);
CFS6(:,:,i)=reshape(CFS5,33,35);
end
rms(33,35,27)=0;
for i=1:1:27
for j=1:1:35
for k=1:1:33
if (CFS6(k,j,i)~=0) || (IMD(k,j,i)~=0)
rms(k,j,i)=((IMD(k,j,i)-CFS6(k,j,i)).^2);
end
end
end
end
rms1(33,35)=0;
for i=1:1:27
rms1(:,:)=rms(:,:,i)+rms1(:,:);
end
rms2=rms1/27;
TMAX_rmse=sqrt(rms2);https://stackoverflow.com/questions/18696077
复制相似问题