ホームページ >バックエンド開発 >Python チュートリアル >ストライドトリックを使用して移動平均フィルターの実装を強化するにはどうすればよいですか?
ストライド トリックを使用した効率的な移動平均フィルターの実装
この調査では、ストライド トリックを使用して、より効率的な移動平均フィルターを開発する方法について調査します。以前の投稿で説明した畳み込みベースの方法。目標は、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 サイトの他の関連記事を参照してください。