Heim >Backend-Entwicklung >Python-Tutorial >Wie kann die Implementierung des gleitenden Durchschnittsfilters mit Stride-Tricks verbessert werden?
Verwendung von Stride-Tricks für eine effiziente Implementierung von gleitenden Durchschnittsfiltern
Diese Untersuchung untersucht die Verwendung von Stride-Tricks, um einen effizienteren gleitenden Durchschnittsfilter zu entwickeln als die in einem früheren Beitrag beschriebene faltungsbasierte Methode. Das Ziel besteht darin, große Gleitkomma-Arrays für Aufgaben zu filtern, bei denen scipy.ndimage.filters.convolve relativ langsam ist.
Der ursprüngliche Ansatz nutzte Stride-Tricks, um eine Reihe von Arrays zu generieren, die den oberen, mittleren und unteren Bereich darstellen Zeilen eines 3x3-Filterkernels. Diese Arrays wurden dann summiert und gemittelt, um die Filterausgabe für jedes Pixel zu erzeugen. Der Fragesteller suchte jedoch nach einer effizienteren Methode, mit der die Summe oder die einzelnen Werte der Kernelelemente für das gesamte Array direkt ermittelt werden könnten.
Verbesserter Ansatz mithilfe multidimensionaler Stride-Tricks
Die erweiterte Lösung beinhaltet die Anwendung multidimensionaler Schritttricks, um eine Ansicht des ursprünglichen Arrays zu erstellen, in der jedes Element ein bewegliches Fenster der gewünschten Größe darstellt. Dies ermöglicht die mehrfache Anwendung einer beliebigen Funktion auf die letzte Achse und die effektive Berechnung des gleitenden Durchschnitts oder anderer gewünschter statistischer Maße über ein Schiebefenster.
Codebeispiel
<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>
Vorteile der erweiterten Lösung
Einschränkungen
Trotzdem Vorteile bietet, ist es wichtig zu beachten, dass die Verwendung von Stride-Tricks für mehrdimensionale bewegliche Fenster zu einer erhöhten Speichernutzung führen kann. Daher sollten die verfügbaren Ressourcen und die Größe des Eingabearrays sorgfältig berücksichtigt werden.
Vergleich mit scipy.ndimage
Während Stride-Tricks Flexibilität und Vorteile bei der Vektorisierung bieten scipy.ndimage-Funktionen sind im Allgemeinen speichereffizienter und für mehrdimensionale Bildverarbeitungsaufgaben optimiert. Für große Arrays wird scipy.ndimage.uniform_filter als schnellere und robustere Option zum Anwenden von gleitenden Durchschnittsfiltern empfohlen.
Das obige ist der detaillierte Inhalt vonWie kann die Implementierung des gleitenden Durchschnittsfilters mit Stride-Tricks verbessert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!