Skip to main content
 首页 » 编程设计

用于一维 numpy 数组的 Python 中值滤波器

2025年05月04日29dflying

我有一个 numpy.array,维度为 dim_array。我期待获得像 scipy.signal.medfilt(data, window_len) 这样的中值滤波器。

这实际上不适用于 numpy.array 可能是因为维度是 (dim_array, 1) 而不是 (dim_array, ).

如何获取这样的过滤器?

接下来,另一个问题,如何获取其他过滤器,即min、max、mean?

请您参考如下方法:

基于 this post ,我们可以创建滑动窗口来获得一个 2D 数组,其中的此类窗口被设置为行。这些窗口只是 data 数组的 View ,因此没有内存消耗,因此效率很高。然后,我们只需沿每一行 axis=1 使用那些 ufuncs。

因此,例如 sliding-median` 可以像这样计算 -

np.median(strided_app(data, window_len,1),axis=1) 

对于其他 ufuncs,只需使用相应的 ufunc 名称:np.min、np.max & np.mean。请注意,这是为了提供一个通用的解决方案来使用 ufunc 支持的功能。

为了获得最佳性能,仍然必须研究为这些目的而构建的特定函数。对于四个请求的函数,我们有内置函数,就像这样 -

中位数:scipy.signal.medfilt .

最大值:scipy.ndimage.filters.maximum_filter1d .

分钟:scipy.ndimage.filters.minimum_filter1d .

平均值:scipy.ndimage.filters.uniform_filter1d