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

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

回答 (1 件)

Hernia Baby
Hernia Baby 2022 年 4 月 7 日
interp2 ですと 内挿値をとるので@Hiroki Takeda さんが意図しているものとは違うものができる気がします。
参考になる回答がこちらにありますので、こちら試していただくことをオススメします。
  4 件のコメント
Hiroki Takeda
Hiroki Takeda 2022 年 4 月 12 日
ありがとうございます。
実際、下記のようなものを組んでいます。エラーが出てしまいます。どのようにすればよろしいでしょうか。
要は、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 2022 年 4 月 12 日
編集済み: Hernia Baby 2022 年 4 月 12 日
エラー行は
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]);
です

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

製品

Community Treasure Hunt

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

Start Hunting!