答案 0 :(得分: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
包含平均结果。