而不是使用循环,请考虑使用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
包含平均结果。