scipy.signal.

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 convolve fü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 convolve automatisch 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

full

Die Ausgabe ist die vollständige diskrete lineare Faltung der Eingaben. (Standard)

valid

Die 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.

same

Die 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

convolve

Verwendet den direkten Faltungs- oder FFT-Faltungsalgorithmus, je nachdem, welcher schneller ist.

oaconvolve

Verwendet 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 convolve2d ermö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()
../../_images/scipy-signal-fftconvolve-1_00.png
../../_images/scipy-signal-fftconvolve-1_01.png