Numpy二维移动平均线

时间:2014-04-10 22:31:29

标签: python numpy moving-average

我有一个2d numpy数组。我想将每个条目的n个最近条目的平均值取,就像在一维数组上取平均值一样。最干净的方法是什么?

1 个答案:

答案 0 :(得分:16)

这与将过滤器应用于图像的概念类似。

幸运的是,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=5mode选项控制边缘的处理方式。您没有指定如何处理边缘。在此示例中,“常量”模式意味着它将数组边界外的每个项目视为常量值0(默认值为0,可以覆盖)。