私はグローバルな気象データを使用しています。データは経度x緯度x時間ステップを表します。すべての緯度と経度で5日間の移動平均を計算したいと思います。第3次元の気象データの移動平均を計算する
以下のイメージは、データ構造を示しています。移動するウィンドウの長さを定義するループを作成するにはどうすればよいですか?
私はグローバルな気象データを使用しています。データは経度x緯度x時間ステップを表します。すべての緯度と経度で5日間の移動平均を計算したいと思います。第3次元の気象データの移動平均を計算する
以下のイメージは、データ構造を示しています。移動するウィンドウの長さを定義するループを作成するにはどうすればよいですか?
代わりのループを使用して、あなたは三次元で平均フィルタを指定convn
機能を使用することを検討してください。あなたができることは、ウィンドウサイズを定義することです。例えば5とし、平均出力が何かになるようにconvn
を使います。ウィンドウが有効でないデータを通過したときの処理を定義することもできます。簡略化するために、出力の形状を入力と同じにすることができるので、'same'
フラグを指定します。これは、最初の(n-1)/ 2時間の観測では、ゼロの埋め込まれた要素の平均値を求めているため、それらをどのように観測するかはあなた次第ですが、観測ウィンドウ内で有効な要素については、それぞれの緯度と経度内で隣接する時間ステップで計算された平均値として解釈できます。
あなたはずっと私たちに与えられていないが、入力行列はA
に保存されているだけでないと仮定すると:
A = ...; % Define A here
n = 5; % Define window size
B = permute(ones(n, 1)/n, [3 2 1]); % Define filter
C = convn(A, B, 'same'); % Perform average
permute
を使用した理由は、の列ベクトルである平均フィルタを変換することです1/n
ここで、n
は3Dシングルトン列のウィンドウサイズですので、これを使用して3次元でフィルタリングすることができます。出力C
には平均結果が含まれています。
ありがとうございます、提供された質問は完璧です。尊敬と敬意 – khan