fftconvolve#
- scipy.signal.fftconvolve(in1, in2, mode='full', axes=None)[Quelle]#
Zwei N-dimensionale Arrays mittels FFT falten.
Faltet in1 und in2 mittels der Fast-Fourier-Transformations-Methode, wobei die Ausgabegröße durch das Argument mode bestimmt wird.
Dies ist im Allgemeinen viel schneller als
convolvefür große Arrays (n > ~500), kann aber langsamer sein, wenn nur wenige Ausgabewerte benötigt werden, und kann nur Fließkomma-Arrays ausgeben (Ganzzahl- oder Objekt-Array-Eingaben werden in Fließkomma umgewandelt).Ab Version 0.19 wählt
convolveautomatisch diese Methode oder die direkte Methode basierend auf einer Schätzung, welche schneller ist.- Parameter:
- in1array_like
Erster Input.
- in2array_like
Zweiter Input. Sollte dieselbe Anzahl von Dimensionen wie in1 haben.
- modestr {‘full’, ‘valid’, ‘same’}, optional
Ein String, der die Größe der Ausgabe angibt
fullDie Ausgabe ist die vollständige diskrete lineare Faltung der Eingaben. (Standard)
validDie Ausgabe besteht nur aus den Elementen, die nicht von der Null-Pufferung abhängen. Im Modus 'valid' muss entweder in1 oder in2 in jeder Dimension mindestens so groß sein wie der andere.
sameDie Ausgabe hat die gleiche Größe wie in1 und ist zentriert bezüglich der 'full'-Ausgabe.
- axesint oder Array-ähnlich von ints oder None, optional
Achsen, über die die Faltung berechnet werden soll. Standardmäßig über alle Achsen.
- Rückgabe:
- outarray
Ein N-dimensionales Array, das einen Teil der diskreten linearen Faltung von in1 mit in2 enthält.
Siehe auch
convolveVerwendet den direkten Faltungs- oder FFT-Faltungsalgorithmus, je nachdem, welcher schneller ist.
oaconvolveVerwendet die Überlappungs-Additions-Methode zur Faltung, die im Allgemeinen schneller ist, wenn die Eingabearrays groß und signifikant unterschiedlich in der Größe sind.
Beispiele
Autokorrelation von weißem Rauschen ist ein Impuls.
>>> import numpy as np >>> from scipy import signal >>> rng = np.random.default_rng() >>> sig = rng.standard_normal(1000) >>> autocorr = signal.fftconvolve(sig, sig[::-1], mode='full')
>>> import matplotlib.pyplot as plt >>> fig, (ax_orig, ax_mag) = plt.subplots(2, 1) >>> ax_orig.plot(sig) >>> ax_orig.set_title('White noise') >>> ax_mag.plot(np.arange(-len(sig)+1,len(sig)), autocorr) >>> ax_mag.set_title('Autocorrelation') >>> fig.tight_layout() >>> fig.show()
Gaußsche Weichzeichnung, implementiert mittels FFT-Faltung. Beachten Sie die dunklen Ränder um das Bild, die durch die Nullauffüllung jenseits seiner Grenzen entstehen. Die Funktion
convolve2dermöglicht andere Arten von Bildgrenzen, ist aber wesentlich langsamer.>>> from scipy import datasets >>> face = datasets.face(gray=True) >>> kernel = np.outer(signal.windows.gaussian(70, 8), ... signal.windows.gaussian(70, 8)) >>> blurred = signal.fftconvolve(face, kernel, mode='same')
>>> fig, (ax_orig, ax_kernel, ax_blurred) = plt.subplots(3, 1, ... figsize=(6, 15)) >>> ax_orig.imshow(face, cmap='gray') >>> ax_orig.set_title('Original') >>> ax_orig.set_axis_off() >>> ax_kernel.imshow(kernel, cmap='gray') >>> ax_kernel.set_title('Gaussian kernel') >>> ax_kernel.set_axis_off() >>> ax_blurred.imshow(blurred, cmap='gray') >>> ax_blurred.set_title('Blurred') >>> ax_blurred.set_axis_off() >>> fig.show()