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

Calculate moving average of meteorological data for third dimension

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

下图显示了数据结构。我怎样才能做一个循环来定义移动的长度window?

考虑使用 convn 函数,而不是使用循环,您可以在其中指定第三维中的平均滤波器。你可以做的是定义一个 window 大小...比如 5,然后使用 convn 给你平均输出。您还可以定义当 window 遍历无效数据时要执行的操作。为简化起见,我们可以指定输出形状与输入形状相同,因此您需要指定 'same' 标志。这意味着对于第一次 (n - 1) / 2 次观察,这是用零填充元素找到平均值,所以如何观察这些取决于你,但对于那些在观察中有效的元素 window,您可以将这些解释为每个纬度和经度内相邻时间步的计算平均值。

你没有给我们太多,但假设输入矩阵存储在 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是您的window大小列,以便我们可以使用它在三维中进行过滤。输出 C 包含平均结果。