4

Matlab でベクトルの 3 つの値を平均化し、それを生成した要素に平均を割り当てたいと思います。

例:

x=[1:12];
y=%The averaging operation;

手術後、

y=
[2 2 2 5 5 5 8 8 8 11 11 11]

したがって、生成されたベクトルは同じサイズであり、3 つの値ごとのジャンプ平均は、平均を生成するために使用された値に置き換えられます (つまり1 2 3、3 つの値の平均に置き換えられます2 2 2)。ループなしでこれを行う方法はありますか?

それが理にかなっていることを願っています。

ありがとう。

4

2 に答える 2

9

私はこのように行きます:

ベクトルを 3×x 行列になるように変形します。

x=[1:12];
xx=reshape(x,3,[]);
% xx is now [1 4 7 10; 2 5 8 11; 3 6 9 12]

その後

yy = sum(xx,1)./size(xx,1)

そしていま

y = reshape(repmat(yy, size(xx,1),1),1,[])

まさにあなたの望む結果を生み出します。

値の数を示すパラメーター3は、1 か所でのみ使用され、必要に応じて簡単に変更できます。

于 2012-10-22T14:51:49.707 に答える
3

以下を使用して、各トリオの平均を見つけることができます。

x = 1:12;
m = mean(reshape(x, 3, []));

平均値を複製し、元のベクトル サイズに合わせて形状を変更するには、次を使用します。

y = m(ones(3,1), :) % duplicates row vector 3 times
y = y(:)'; % vector representation of array using linear indices

于 2012-10-24T00:57:20.493 に答える