scipy.signal.

convolve#

scipy.signal.convolve(in1, in2, mode='full', method='auto')[源码]#

对两个N维数组进行卷积。

in1in2 进行卷积,输出大小由 mode 参数决定。

参数:
in1array_like

第一个输入。

in2array_like

第二个输入。应与 in1 具有相同的维度数。

modestr {'full', 'valid', 'same'}, optional

指示输出大小的字符串

full

输出是输入的完整离散线性卷积。(默认)

valid

输出仅包含那些不依赖零填充的元素。在 'valid' 模式下,in1in2 必须在每个维度上至少与另一个一样大。

same

输出与 in1 大小相同,相对于 'full' 输出居中。

methodstr {'auto', 'direct', 'fft'}, optional

指示用于计算卷积的方法的字符串。

direct

卷积直接通过求和确定,即卷积的定义。

fft

傅里叶变换通过调用 fftconvolve 来执行卷积。

auto

根据对哪种方法更快的估计(默认)自动选择直接或傅里叶方法。有关更多详细信息,请参阅“备注”部分。

在 0.19.0 版本中添加。

返回:
convolvearray

一个N维数组,包含 in1in2 的离散线性卷积的子集。

警告:
RuntimeWarning

对包含 NAN 或 INF 的输入使用 FFT 卷积将导致整个输出为 NAN 或 INF。当您的输入包含 NAN 或 INF 值时,请使用 method='direct'。

另请参阅

numpy.polymul

执行多项式乘法(相同操作,但也可接受 poly1d 对象)

choose_conv_method

选择最快的合适卷积方法

fftconvolve

始终使用 FFT 方法。

oaconvolve

使用重叠相加法进行卷积,当输入数组很大且大小差异显著时,通常更快。

备注

默认情况下,convolvecorrelate 使用 method='auto',它调用 choose_conv_method 通过预计算值选择最快的方法(choose_conv_method 也可以通过关键字参数测量实际时间)。由于 fftconvolve 依赖于浮点数,因此存在某些限制可能强制使用 method='direct'choose_conv_method 文档字符串中有更多详细信息)。

示例

使用汉宁窗平滑方波脉冲

>>> import numpy as np
>>> from scipy import signal
>>> sig = np.repeat([0., 1., 0.], 100)
>>> win = signal.windows.hann(50)
>>> filtered = signal.convolve(sig, win, mode='same') / sum(win)
>>> import matplotlib.pyplot as plt
>>> fig, (ax_orig, ax_win, ax_filt) = plt.subplots(3, 1, sharex=True)
>>> ax_orig.plot(sig)
>>> ax_orig.set_title('Original pulse')
>>> ax_orig.margins(0, 0.1)
>>> ax_win.plot(win)
>>> ax_win.set_title('Filter impulse response')
>>> ax_win.margins(0, 0.1)
>>> ax_filt.plot(filtered)
>>> ax_filt.set_title('Filtered signal')
>>> ax_filt.margins(0, 0.1)
>>> fig.tight_layout()
>>> fig.show()
../../_images/scipy-signal-convolve-1.png