使用步幅进行高效移动平均过滤
在本文中,我们将讨论如何使用步幅来构建高效的移动平均过滤器。 Strides 提供了一种创建现有数组视图的方法,允许在不修改原始数据的情况下进行优化计算。
现有方法
现有方法利用 strides 生成数组代表一个移动的滤波器内核。然后垂直滚动该内核以捕获必要的值,并计算它们的总和以获得平均值。
改进的方法
改进的方法采用“花式”跨步技术直接获取9个值或内核元素的聚合,提供更全面的解决方案。这可以针对 N 维数组实现。
内存注意事项
虽然步幅可以实现高效的单轴移动窗口操作,但在以下情况下注意潜在的内存影响至关重要:使用多维数组。涉及复制数组的中间步骤可能会导致内存使用量显着增加。
专用函数
在处理多维移动窗口时,需要像 scipy.推荐使用 ndimage 而不是跨步技巧。这些函数提供高效的边界处理、就地执行计算并具有出色的性能。
演示
下面的代码片段说明了特定过滤器的滚动窗口函数size:
<code class="python">filtsize = (3, 3) a = np.zeros((10,10), dtype=np.float) a[5:7,5] = 1 b = rolling_window(a, filtsize) blurred = b.mean(axis=-1).mean(axis=-1)</code>
结论
虽然步幅为单轴移动窗口操作提供了一种便捷的方法,但对于多维数组来说效果较差。 scipy.ndimage 等专业函数为此类场景提供了更高效、更通用的解决方案。
以上是使用步幅进行高效移动平均过滤有哪些好处以及何时使用?的详细内容。更多信息请关注PHP中文网其他相关文章!