細かいgriddat​aを荒いgridda​taに直す方法

8 views (last 30 days)
Hiroki Takeda
Hiroki Takeda on 7 Apr 2022
Edited: Hernia Baby on 12 Apr 2022
緯度・経度ごとのgriddata(海面水温)があります(sizeは4500×3251の配列です)。
これを,緯度(2°間隔)・経度(5°間隔)の分解能へ粗くして,sizeを90×72の配列にしたいです。
代表となる緯度(2°間隔)・経度(5°間隔)のdataを中心として,その周辺のデータの代表値(平均値)として取り出したいです。
その際に,interp2がいいのか,それとも別な方法があるのか知りたいです。
よろしくお願いいたします。

Answers (1)

Hernia Baby
Hernia Baby on 7 Apr 2022
interp2 ですと 内挿値をとるので@Hiroki Takeda さんが意図しているものとは違うものができる気がします。
参考になる回答がこちらにありますので、こちら試していただくことをオススメします。
  4 Comments
Hiroki Takeda
Hiroki Takeda on 12 Apr 2022
ありがとうございます。
実際、下記のようなものを組んでいます。エラーが出てしまいます。どのようにすればよろしいでしょうか。
要は、Bを、緯度(2°間隔、90データ)・経度(5°間隔、72データ)にしたいです。
最終的には、Bをメルカトル図法で描画することをイメージしています。
申し訳ございませんが、ご教示いただけますと幸いです。よろしくお願いいたします。
<変数>
mT, lon, lat 4500×2001
<エラー>
Index in position 2 exceeds array bounds. Index must not exceed 2001.
clear; close;
numfiles = 12;
mydata = cell(1, numfiles);
temp=[];
for k = 1:numfiles
filename = sprintf('../data/2000_%02d_t.nc', k);
Temp = ncread(filename,'water_temp');temp=[temp,Temp];
lon=ncread(filename,'lon');lat=ncread(filename,'lat');
close;
end
lon=repmat(lon,1,size(lat,1));lat=repmat(lat',size(lon,1),1);
temp=reshape(temp,[size(lon,1) size(lon,2) numfiles]);
mT=mean(temp,3); %3Dでmeanを取る。
%% 区画平均を取る
n=size(lon,1); m=size(lon,2); %区画を決めます
n1=90; m1=72; %何分割にするか決めます
step = round([n m]./[n1 m1]);
% cellに格納します
for ii = 1:n1
for jj = 1:m1
A{ii,jj} = mT(step(1)*(ii-1)+1:step(1)*ii,step(2)*(jj-1)+1:step(2)*jj);
end
end
% 区画で平均を取ります
B = cellfun(@(x) mean(x,["all"]),A);
Hernia Baby
Hernia Baby on 12 Apr 2022
Edited: Hernia Baby on 12 Apr 2022
エラー行は
for ii = 1:n1
for jj = 1:m1
A{ii,jj} = mT(step(1)*(ii-1)+1:step(1)*ii,step(2)*(jj-1)+1:step(2)*jj);
end
end
でしょうか?
であれば、これは丸め方がダメです
round 関数が 28 > m/m1 で計算しているので、このようなエラーが置きます
27 < m/m1 のようにするには fixfloor を使用してください
% step = round([n m]./[n1 m1]);
step = fix([n m]./[n1 m1]);
です

Sign in to comment.

Categories

Find more on 内挿 in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!