在matlab中平均向量的每n个元素

时间:2012-10-22 14:45:28

标签: matlab vector average

我想在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被三个值{{1}的平均值替换。 })。有没有循环的方法呢?

我希望这是有道理的。

感谢。

2 个答案:

答案 0 :(得分: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 :(得分: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