3

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 の 2 列目に使用しようとしている 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;]

何か提案があれば、よろしくお願いします。ありがとうございました!

4

1 に答える 1

4

一般に、エラーを表示すると役立ちます。この場合、次の 2 つのことを間違っています。

まず、畳み込みを 3 (または移動平均の長さ) で割る必要があります。

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
于 2013-06-12T01:50:22.727 に答える