计算第三维气象数据的移动平均值

问题描述 投票:1回答:1

我正在使用全球气象数据。数据表示经度x纬度x时间步长。我想计算所有纬度和经度的五天移动平均值。

下图显示了数据结构。如何制作循环来定义移动窗口的长度?

sample data

matlab moving-average
1个回答
2
投票

而不是使用循环,请考虑使用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的列向量的平均过滤器转换为3D单例列,因此我们可以使用它来过滤第三维中的n。输出C包含平均结果。

© www.soinside.com 2019 - 2024. All rights reserved.