在圆圈上移动平均值

时间:2017-08-21 02:17:57

标签: matlab mean

有没有办法以一种方式计算移动平均值,使得数组开头和结尾的值与另一端的值平均?

例如,而不是这个结果:

A=[2 1 2 4 6 1 1];
movmean(A,2)
ans = 2.0 1.5 1.5 3.0 5 3.5 1.0

我想获得向量[1.5 1.5 1.5 3 5 3.5 1.0],因为初始数组元素2将与结束元素1平均。

3 个答案:

答案 0 :(得分:5)

推广到任意窗口大小N,这就是你可以按照你想要的方式向movmean添加循环行为的方法:

movmean(A([(end-floor(N./2)+1):end 1:end 1:(ceil(N./2)-1)]), N, 'Endpoints', 'discard')

对于给定的AN = 2,您会得到:

ans =

1.5000    1.5000    1.5000    3.0000    5.0000    3.5000    1.0000

答案 1 :(得分:2)

Convolution提供了一些很好的方法。但是,如果您只是对结果进行部分平均,则可能需要略微调整输入(即第一个与示例中的最后一个平均,但最后一个不与第一个平均)。

cursor.moveToFirst();

此处的广义案例,对于大小为conv([A(end),A],[0.5 0.5],'valid') ans = 1.5000 1.5000 1.5000 3.0000 5.0000 3.5000 1.0000 的移动平均线,为:

N

答案 2 :(得分:2)

对于任意窗口大小n,您可以使用circular convolution并将平均掩码定义为[1/n ... 1/n](带n个条目;在您的示例n = 2中):

result = cconv(A, repmat(1/n, 1, n), numel(A));