Verwenden von Advanced Striding für einen effizienteren gleitenden Durchschnittsfilter
Einführung:
Computing-Bewegung Durchschnittsfilter für große Datensätze können rechenintensiv sein. Während Standardimplementierungen mit Faltungsfiltern langsam sein können, bieten fortgeschrittene Striding-Techniken eine effizientere Lösung.
Vorgeschlagene Technik:
Die vorgeschlagene Technik beinhaltet die Verwendung von NumPys stride_tricks.as_strided( )-Funktion zum Erstellen eines Arrays, das einem sich bewegenden Fenster über dem ursprünglichen Array entspricht. Durch vertikales und horizontales Rollen dieses Arrays können die Kernelwerte effizient summiert werden, um den Durchschnitt für jedes Pixel zu berechnen.
Implementierung:
Der folgende Code demonstriert die Implementierung von diese Technik:
<code class="python">import numpy as np filtsize = 3 a = numpy.arange(100).reshape((10,10)) b = np.lib.stride_tricks.as_strided(a, shape=(a.size,filtsize), strides=(a.itemsize, a.itemsize)) for i in range(0, filtsize-1): if i > 0: b += numpy.roll(b, -(pow(filtsize,2)+1)*i, 0) filtered = (numpy.sum(b, 1) / pow(filtsize,2)).reshape((a.shape[0],a.shape[1]))</code>
Vorteile:
Diese Technik bietet mehrere Vorteile gegenüber herkömmlichen Faltungsfiltern:
Einschränkungen:
Alternative Ansätze:
Das obige ist der detaillierte Inhalt vonWie kann Advanced Striding die Effizienz von Filtern mit gleitendem Durchschnitt verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!