首頁 >後端開發 >Python教學 >如何透過跨步技巧增強移動平均濾波器的實現?

如何透過跨步技巧增強移動平均濾波器的實現?

Susan Sarandon
Susan Sarandon原創
2024-10-19 10:02:30319瀏覽

How to Enhance Moving Average Filter Implementation with Stride Tricks?

使用跨步技巧實現高效移動平均濾波器

此查詢探討如何使用跨步技巧來開發比上一篇文章中所描述的基於卷積的方法。目標是為 scipy.ndimage.filters.convolve 相對較慢的任務過濾大型浮點陣列。

最初的方法採用跨步技巧來產生一系列表示頂部、中間和底部的數組3x3 過濾器內核的行。然後對這些數組進行求和並平均以產生每個像素的濾波器輸出。然而,提問者尋求一種更有效的方法,可以直接取得整個陣列的內核元素的總和或單一值。

使用多維跨步技巧的改進方法

增強的解決方案涉及應用多維跨步技巧來創建原始數組的視圖,其中每個元素代表所需大小的移動視窗。這允許對最後一個軸多次應用任意函數,有效地計算滑動視窗上的移動平均值或其他所需的統計度量。

程式碼範例

<code class="python">import numpy as np

def rolling_window(array, window):
    """Multidimensional moving window function"""
    # Validate window dimensions
    if not hasattr(window, '__iter__'):
        return rolling_window_lastaxis(array, window)
    for i, win in enumerate(window):
        if win > 1:
            array = array.swapaxes(i, -1)
            array = rolling_window_lastaxis(array, win)
            array = array.swapaxes(-2, i)
    return array

filtsize = (3, 3)
array = np.arange(100).reshape((10, 10))
windowed_array = rolling_window(array, filtsize)
blurred_array = windowed_array.mean(axis=-1).mean(axis=-1)</code>

增強解決方案的優點

  • 使用跨步技巧直接產生移動窗口,無需中間步驟。
  • 適用於多維數組,允許用於沿多個軸進行高效過濾。
  • 移動視窗操作的向量化,從而顯著減少計算時間。

限制

儘管如此儘管有優點,但值得注意的是,對多維移動視窗使用跨步技巧可能會導致記憶體使用量增加。因此,應仔細考慮可用資源和輸入數組的大小。

與scipy.ndimage 的比較

雖然步幅技巧提供了靈活性和向量化優勢、 scipy.ndimage 函數通常更節省內存,並且針對多維圖像處理任務進行了優化。對於大型數組,建議使用 scipy.ndimage.uniform_filter 作為應用移動平均濾波器的更快、更穩健的選項。

以上是如何透過跨步技巧增強移動平均濾波器的實現?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn