使用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的第二列使用的conv命令:
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;]

如果你有什么建议,我将不胜感激谢谢您!

最佳答案

一般来说,如果你能显示错误的话会有帮助的在这种情况下,你做错了两件事:
首先你的卷积需要除以三(或移动平均线的长度)

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

关于matlab - 使用MATLAB,如何找到移动平均线?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17055979/

10-09 04:35