Inhaltsverzeichnis
Faltungsfunktion
对比测试
Heim Backend-Entwicklung Python-Tutorial So verwenden Sie die Python-Faltungsfunktion

So verwenden Sie die Python-Faltungsfunktion

May 20, 2023 pm 09:31 PM
python

Faltungsfunktion

python bietet eine Vielzahl von Faltungsschemata. Im Vergleich dazu ist die in ndimage definierte Faltungsfunktion funktionaler als Die Faltung in Numpy und signal ist etwas komplizierter. Dies lässt sich allein an der Anzahl der Eingabeparameter erkennen. Die ersten beiden sind eindimensionale Faltungsfunktionen. Und ndimage kann Faltungsoperationen für mehrdimensionale Arrays durchführen entlang einer einzelnen Koordinatenachse, und die beiden letzteren sind mehrdimensionale Faltungen. python提供了多种卷积方案,相比之下,定义在ndimage中的卷积函数,在功能上比numpysignal中的卷积要稍微复杂一些,这点仅从输入参数的多少就可略窥一二

numpy.convolve(a, v, mode='full')
scipy.ndimage.convolve1d(input, weights, axis=-1, output=None, mode='reflect', cval=0.0, origin=0)

scipy.signal.convolve(in1, in2, mode='full', method='auto')
scipy.ndimage.convolve(input, weights, output=None, mode='reflect', cval=0.0, origin=0)
Nach dem Login kopieren

前两者为1维卷积函数,且ndimage可对多维数组沿着单个坐标轴进行卷积操作,后两者为多维卷积。

numpy和signal中的卷积函数,其mode都有三种,用以调节卷积后的边缘特性,如果输入的两个卷积对象的维度分别是N NN和M MM,则这三种模式的输出结果为

  • full: 输出维度N + M − 1 N+M-1N+M−1,其最后一点的信号完全不交叠,故而边缘效应明显。

  • same:输出维度max ⁡ ( M , N ) max(M,N)max(M,N),边缘效应仍然可见

  • valid:输出维度∣ M − N ∣ |M-N|∣M−N∣,只返回完全交叠的区域,相当于把存在边缘效应的点都率除掉了

ndimage中的convolve针对边缘效应,对图像进行扩展,而其mode决定的就是扩展之后的填充格式,设待滤波数组为a b c d,则在不同的模式下,对边缘进行如下填充


左侧填充数据右侧填充
reflectd c b aa b c dd c b a
constantk k k ka b c dk k k k
nearesta a a aa b c dd d d d
mirrord c ba b c dc b a
wrapa b c da b c da b c d

其中,k通过参数cval设定。

这五种修改边界的方法,在scipy.ndimage的函数中十分普遍,尤其是涉及到卷积的滤波函数,堪称标配。

对比测试

接下来针对这些不同的卷积函数,做一下性能测试,用5 × 5的卷积模板,对1000 × 1000的矩阵进行卷积计算,来看一下不同实现方案的卷积,其速度如何

import numpy as np
import scipy.signal as ss
import scipy.ndimage as sn
from timeit import timeit


A = np.random.rand(1000,1000)
B = np.random.rand(5,5)

timeit(lambda : ss.convolve(A, B), number=10)
# 0.418
timeit(lambda : sn.convolve(A, B), number=10)
# 0.126
Nach dem Login kopieren

相比之下,ndimage中的卷积显然是更高效的。

接下来测试一下一维卷积的表现

A = np.random.rand(10000)
B = np.random.rand(15)

timeit(lambda : np.convolve(A, B), number=1000)
# 0.15256029999727616
timeit(lambda : ss.convolve(A, B), number=1000)
# 0.1231262000001152
timeit(lambda : sn.convolve(A, B), number=1000)
# 0.09218210000108229
timeit(lambda : sn.convolve1d(A, B), number=1000)
# 0.03915820000111125
Nach dem Login kopieren

相比之下,convolve1d不愧是写明了1d的卷积函数,速度最快,而numpy

Die Faltungsfunktionen in Numpy und Signal verfügen über drei Modi, mit denen die Kanteneigenschaften nach der Faltung angepasst werden. Wenn die Abmessungen der beiden Eingabefaltungsobjekte N NN bzw. M MM sind, sind diese drei Modi Das Ausgabeergebnis ist

full: Ausgabedimension N + M − 1 N+M-1N+M−1 und ihre endgültigen Signale bei eins Die Punkte überlappen sich überhaupt nicht, daher ist der Kanteneffekt offensichtlich.

  • gleich: Ausgabedimension max ⁡ ( M , N ) max(M,N)max(M,N), Kanteneffekte sind weiterhin sichtbar

  • < li>So verwenden Sie die Python-Faltungsfunktionvalid: Ausgabedimension ∣ M − li>

    convolve in ndimage erweitert das Bild für Kanteneffekte und sein mode bestimmt das erweiterte Füllformat, vorausgesetzt, dass das Das zu filternde Array ist a b c d, dann werden die Kanten in verschiedenen Modi wie folgt gefüllt

    < td>a b c d

    Auffüllung linksDatenAuffüllung rechts
    reflectd c b aa b c dd c b a
    < code>constantk k k ka b c dk k k k
    nearest< /code></ td><td>a a a a a</td><td>a b c d</td><td>d d d d</td></tr><tr><td><code>mirror< /td>d c ba b c dc b a
    wrapa b c da b c d

    Unter diesen übergibt k den Parameter cval< /code> Einstellungen. 🎜🎜Diese fünf Methoden zum Ändern der Grenze sind in den Funktionen von <code>scipy.ndimage sehr verbreitet, insbesondere in den Standardfilterfunktionen mit Faltung. 🎜🎜Vergleichstest🎜🎜 Führen Sie als Nächstes einen Leistungstest für diese verschiedenen Faltungsfunktionen durch, um Faltungsberechnungen für eine 1000 × 1000-Matrix durchzuführen 🎜
    from scipy.misc import ascent
    import matplotlib.pyplot as plt
    img = ascent()
    temp = np.zeros([3,3])
    temp[:,0] = -1
    temp[:,2] = 1
    
    edge = sn.convolve(img, temp)
    
    fig = plt.figure()
    ax = fig.add_subplot(121)
    ax.imshow(img)
    ax = fig.add_subplot(122)
    ax.imshow(edge)
    plt.show()
    Nach dem Login kopieren
    🎜Im Vergleich dazu ist die Faltung in ndimage offensichtlich effizienter. 🎜🎜Als nächstes testen wir die Leistung der eindimensionalen Faltung🎜rrreee🎜Im Gegensatz dazu ist convolve1d tatsächlich die Faltungsfunktion von 1d, die die schnellste ist Die bereitgestellten Funktionen in numpy sind die langsamsten. 🎜🎜Faltungsanwendung🎜🎜Faltungsoperationen werden häufig bei der Bildfilterung und Kantenextraktion verwendet. Mithilfe einer Matrix ähnlich der folgenden können beispielsweise die vertikalen Kanten des Bildes extrahiert werden. 🎜🎜🎜🎜🎜Lass uns einen einfachen Test machen🎜rrreee

    Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Python-Faltungsfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße Artikel -Tags

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Was sind die Vor- und Nachteile des Templatings? Was sind die Vor- und Nachteile des Templatings? May 08, 2024 pm 03:51 PM

    Was sind die Vor- und Nachteile des Templatings?

    So laden Sie Deepseek Xiaomi herunter So laden Sie Deepseek Xiaomi herunter Feb 19, 2025 pm 05:27 PM

    So laden Sie Deepseek Xiaomi herunter

    Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an Jul 01, 2024 am 07:22 AM

    Google AI kündigt Gemini 1.5 Pro und Gemma 2 für Entwickler an

    Für nur 250 US-Dollar zeigt Ihnen der technische Leiter von Hugging Face Schritt für Schritt, wie Sie Llama 3 verfeinern Für nur 250 US-Dollar zeigt Ihnen der technische Leiter von Hugging Face Schritt für Schritt, wie Sie Llama 3 verfeinern May 06, 2024 pm 03:52 PM

    Für nur 250 US-Dollar zeigt Ihnen der technische Leiter von Hugging Face Schritt für Schritt, wie Sie Llama 3 verfeinern

    Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks May 06, 2024 pm 04:43 PM

    Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks

    Eine vollständige Anleitung zum Debuggen und Analysieren von Golang-Funktionen Eine vollständige Anleitung zum Debuggen und Analysieren von Golang-Funktionen May 06, 2024 pm 02:00 PM

    Eine vollständige Anleitung zum Debuggen und Analysieren von Golang-Funktionen

    Wie fragst du ihn Deepseek? Wie fragst du ihn Deepseek? Feb 19, 2025 pm 04:42 PM

    Wie fragst du ihn Deepseek?

    So speichern Sie die Evaluierungsfunktion So speichern Sie die Evaluierungsfunktion May 07, 2024 am 01:09 AM

    So speichern Sie die Evaluierungsfunktion

    See all articles