細かい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 CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

제품

Community Treasure Hunt

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

Start Hunting!