ホームページ >バックエンド開発 >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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。