嗨,我有一些数据,我想计算中心移动平均值或两侧移动平均值。
我已经知道可以使用numpy.convolve函数完成此操作多么容易,并且我想知道是否有一种简单或类似的方法可以完成此操作,但是平均时间需要两面。
如果间隔包含三个条目N = 3,则单侧移动平均通常以以下方式工作:
import numpy
list = [3, 4, 7, 8, 9, 10]
N = 3
window = numpy.repeat(1., N)/N
moving_avg = numpy.convolve(list, window, 'valid')
moving_avg = array([ 4.66666667, 6.33333333, 8. , 9. ])
现在我要获取的是居中的平均值,因此,如果N = 3,则取平均值的间隔为:[[3,4,7],[4,7,8] ,[7、8、9],[8、9、10]。如果N是偶数,这也很棘手。有没有计算工具?我更愿意通过编写函数或使用numpy来做到这一点。
答案 0 :(得分:1)
像评论员一样,我也很困惑您要实现的目标与您演示的方式不同。
无论如何,我确实想提供一种解决方案,允许您使用Numba's @stencil
decorator编写自己的卷积运算:
{
"size": 0,
"aggs": {
"routes": {
"terms": {
"field": "route",
"size": 50
}
}
}
}
不确定这是否正是您要寻找的东西,但模具操作员很棒。您传递的变量表示给定的元素,并且您使用的任何索引都是相对于该元素的。如您所见,创建一个3个元素的窗口以计算移动平均值非常容易。
希望这能满足您的需求。
您可以将一个参数添加到模具中(包括在内)。让我们邻里9:
ip_range
您可以使用(-8,0)或(0,8)向前或向后移动范围,并更改范围。
不确定这是否是最好的方法,但是我用包装器完成了它:
from numba import stencil
@stencil
def ma(a):
return (a[-1] + a[0] + a[1]) / 3
data = np.array([3, 4, 7, 8, 9, 10])
print(ma(data))
[0. 4.66666667 6.33333333 8. 9. 0. ]
同样,索引很奇怪,因此您必须使用它才能获得想要的效果。