0

私は(気候変数の)3Dデータ(x = 33、y = 35、z = 27)を持っています。ここで、x、yはグリッドポイントを指し、zは時間(年)です。特定の期間のグリッドごとの RMSE が必要です。RMSE を計算する前に、ファイルをマスクする必要があります。マスク ファイルとデータの次元は同じです (時間を含む)。いいえ。RMSE を検出する必要があるグリッドの数は、マスキング後に減少します (33*35=1155 から 357)。元のデータを再形成した後、これらの縮小されたグリッドの RMSE を見つけました。これで、RMSE (357*1) の列行列ができました。これは、2 次元、つまりそれぞれのグリッド (33*35) で表示する必要があります。1 次元の小さい配列から 2 次元の大きい配列に再形成するにはどうすればよいですか? 私のコードは次のとおりです。

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

% 上記の 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);

% これで 'r1'(357*1) が残りました。しかし、どうすれば 33*35 に戻すことができますか?

4

2 に答える 2