ストライドを使用した効率的な移動平均フィルタリング
この記事では、効率的な移動平均フィルタを構築するためのストライドの使用について説明します。ストライドは、既存の配列のビューを作成する手段を提供し、元のデータを変更せずに最適化された計算を可能にします。
既存のアプローチ
既存のアプローチは、ストライドを利用して配列を生成します。移動するフィルター カーネルを表します。次に、このカーネルは垂直にローリングされて必要な値が取得され、それらの合計が計算されて平均が得られます。
改良されたアプローチ
改良されたアプローチでは、「ファンシー」が採用されています。カーネル要素の 9 つの値または集合体を直接取得するストライディング技術により、より包括的なソリューションが提供されます。これは N 次元配列に実装できます。
メモリに関する考慮事項
ストライドにより効率的な 1 軸移動ウィンドウ操作が可能になりますが、次の場合には潜在的なメモリへの影響に注意することが重要です。多次元配列を操作します。配列のコピーを伴う中間ステップでは、メモリ使用量が大幅に増加する可能性があります。
特殊な関数
多次元の移動ウィンドウを扱う場合、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 中国語 Web サイトの他の関連記事を参照してください。