我想在 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
)。有没有办法在没有循环的情况下做到这一点?
我希望这是有道理的。
谢谢。
我会这样:
重塑向量,使其成为一个 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
,表示值的数量,仅在一个地方使用,并且可以在需要时轻松修改。
您可以使用以下方法找到每个三重奏的平均值:
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