scipy.signal.

fftconvolve#

scipy.signal.fftconvolve(in1, in2, mode='full', axes=None)[原始碼]#

使用 FFT 卷積兩個 N 維陣列。

使用快速傅立葉轉換方法卷積 in1in2,輸出大小由 mode 參數決定。

對於大型陣列 (n > ~500),這通常比 convolve 快得多,但當只需要少數輸出值時可能會比較慢,並且只能輸出浮點陣列(整數或物件陣列輸入將被轉換為浮點數)。

從 v0.19 開始,convolve 會根據哪個更快的估計值自動選擇此方法或直接方法。

參數:
in1array_like

第一個輸入。

in2array_like

第二個輸入。應具有與 in1 相同的維度數。

modestr {‘full’, ‘valid’, ‘same’}, 選項性

指示輸出大小的字串

full

輸出是輸入的完整離散線性卷積。(預設)

valid

輸出僅包含不依賴零填充的元素。在 'valid' 模式下,in1in2 在每個維度上都必須至少與另一個一樣大。

same

輸出與 in1 的大小相同,相對於 'full' 輸出居中。

axesint 或 int 的 array_like 或 None,選項性

計算卷積的軸。預設值為所有軸。

返回:
outarray

一個 N 維陣列,包含 in1in2 的離散線性卷積的子集。

另請參閱

convolve

根據哪個更快,使用直接卷積或 FFT 卷積演算法。

oaconvolve

使用重疊相加方法進行卷積,當輸入陣列很大且大小差異顯著時,通常更快。

範例

白雜訊的自相關是一個脈衝。

>>> 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()

使用 FFT 卷積實作的高斯模糊。請注意影像周圍的黑色邊框,這是由於超出其邊界的零填充所致。convolve2d 函數允許其他類型的影像邊界,但速度慢得多。

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