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替换为三个值的平均值,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,表示值的数量,仅在一个地方使用,并且可以在需要时轻松修改。

于 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 回答