使用MATLAB,如何找到矩阵特定列的3天移动平均值并将移动平均值附加到该矩阵?我试图从矩阵的底部到顶部计算3天移动平均线。我提供了我的代码:
给出以下矩阵a和掩码:
a = [1,2,3;4,5,6;7,8,9;10,11,12;13,14,15;16,17,18];
mask = ones(3,1);
我已尝试实现conv命令但我收到错误。这是我一直试图在矩阵a的第二列上使用的转换命令:
a(:,4) = conv(a(:,2),mask,'valid');
我想要的输出在以下矩阵中给出:
desiredOutput = [1,2,3,5;4,5,6,8;7,8,9,11;10,11,12,14;13,14,15,0;16,17,18,0;]
如果您有任何建议,我将不胜感激。谢谢!
答案 0 :(得分:4)
一般情况下,如果您显示错误会有所帮助。在这种情况下,你做错了两件事:
首先你的卷积需要除以三(或移动平均线的长度)
c = conv(a(:,2),mask,'valid')/3
c =
5
8
11
14
其次,请注意c
的大小。您不能只将c
放入a
。获得移动平均线的典型方法是使用same
:
a(:,4) = conv(a(:,2),mask,'same')/3
a =
1.0000 2.0000 3.0000 2.3333
4.0000 5.0000 6.0000 5.0000
7.0000 8.0000 9.0000 8.0000
10.0000 11.0000 12.0000 11.0000
13.0000 14.0000 15.0000 14.0000
16.0000 17.0000 18.0000 10.3333
但这看起来不像你想要的那样。
相反,你被迫使用几行:
c = conv(a(:,2),mask,'valid')/3;
a(1:length(c),4) = c
a =
1 2 3 5
4 5 6 8
7 8 9 11
10 11 12 14
13 14 15 0
16 17 18 0