我有一个二维 numpy 数组。我想要对于每个条目,取其最靠近的 n 个条目的平均值,就像对一维数组进行滑动平均一样。有什么最简洁的方法可以做到这一点?
我有一个二维 numpy 数组。我想要对于每个条目,取其最靠近的 n 个条目的平均值,就像对一维数组进行滑动平均一样。有什么最简洁的方法可以做到这一点?
这类似于将滤镜应用于图像的概念。
幸运的是,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
选项控制边缘的处理方式。你没有指定如何处理边缘。 在这个例子中,“constant”模式意味着它将数组边界外的每个项目都视为0的常量值(0是默认值,可以被覆盖)。
img
,我想计算每个像素周围 5x5 网格的平均值,我应该使用什么精确的调用呢? - Sean Mackesey