我想在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}的平均值替换。 })。有没有循环的方法呢?
我希望这是有道理的。
感谢。
答案 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