Numpy 二维移动平均线
Posted
技术标签:
【中文标题】Numpy 二维移动平均线【英文标题】:Numpy Two-Dimensional Moving Average 【发布时间】:2014-05-24 21:08:54 【问题描述】:我有一个 2d numpy 数组。我想对每个条目取 n 个最近条目的平均值,就像在一维数组上取滑动平均值一样。最干净的方法是什么?
【问题讨论】:
你如何定义“n个最近的条目”?这是一个以当前条目为中心的正方形区域(例如 5x5)吗? @PeterGibson 这可以正常工作——该区域的确切形状对我的用例来说并不重要。 【参考方案1】:这与将过滤器应用于图像的概念类似。
幸运的是,scipy.ndimage.filters
有很多功能可以做到这一点。你要找的是scipy.ndimage.uniform_filter
。
可以这样使用:
a
=>
array([[ 0., 1., 2., 3., 4.],
[ 5., 6., 7., 8., 9.],
[ 10., 11., 12., 13., 14.],
[ 15., 16., 17., 18., 19.],
[ 20., 21., 22., 23., 24.]])
uniform_filter(a, size=3, mode='constant')
=>
array([[ 1.33333333, 2.33333333, 3. , 3.66666667, 2.66666667],
[ 3.66666667, 6. , 7. , 8. , 5.66666667],
[ 7. , 11. , 12. , 13. , 9. ],
[ 10.33333333, 16. , 17. , 18. , 12.33333333],
[ 8. , 12.33333333, 13. , 13.66666667, 9.33333333]])
如果您想要 5x5 过滤器,请使用 size=5
。 mode
选项控制边缘的处理方式。您没有指定要如何处理边缘。在此示例中,“常量”模式意味着它将数组边界之外的每个项目视为常量值 0(0 是默认值,可以覆盖)。
【讨论】:
谢谢,但链接的文档有点稀疏。如果我的图像被称为img
并且我想计算每个像素周围 5x5 网格的平均值,我将使用的确切调用是什么?
不能为每个轴指定不同的mode
真是太可惜了。或者,等等,我想那是行不通的。以上是关于Numpy 二维移动平均线的主要内容,如果未能解决你的问题,请参考以下文章
NumPy 版本的“指数加权移动平均线”,相当于 pandas.ewm().mean()
如何使用 python + NumPy / SciPy 计算滚动/移动平均值?