convolve#
- scipy.signal.convolve(in1, in2, mode='full', method='auto')[source]#
对两个 N 维数组进行卷积运算。
对 in1 和 in2 进行卷积运算,输出大小由 mode 参数决定。
- 参数::
- in1array_like
第一个输入。
- in2array_like
第二个输入。应该与 in1 具有相同的维数。
- modestr {‘full’, ‘valid’, ‘same’}, 可选
一个字符串,指示输出的大小
full
输出是输入的完整离散线性卷积。 (默认)
valid
输出仅包含那些不依赖于零填充的元素。 在 ‘valid’ 模式下,in1 或 in2 中的至少一个在每个维度上必须至少与另一个一样大。
same
输出的大小与 in1 相同,相对于 ‘full’ 输出居中。
- methodstr {‘auto’, ‘direct’, ‘fft’}, 可选
一个字符串,指示用于计算卷积的方法。
direct
卷积直接由和来确定,即卷积的定义。
fft
使用傅里叶变换通过调用
fftconvolve
来执行卷积。auto
根据对哪种方法更快进行的估计自动选择直接方法或傅里叶方法(默认)。 有关更多详细信息,请参见注释。
在版本 0.19.0 中添加。
- 返回::
- convolvearray
包含 in1 与 in2 的离散线性卷积的子集的 N 维数组。
- 警告::
- RuntimeWarning
在包含 NAN 或 INF 的输入上使用 FFT 卷积将导致整个输出为 NAN 或 INF。 当输入包含 NAN 或 INF 值时,请使用 method=’direct’。
参见
numpy.polymul
执行多项式乘法(相同操作,但也接受 poly1d 对象)
choose_conv_method
选择最快的适当卷积方法
fftconvolve
始终使用 FFT 方法。
oaconvolve
使用重叠相加方法执行卷积,这在输入数组很大且大小差异很大时通常更快。
注释
默认情况下,
convolve
和correlate
使用method='auto'
,它调用choose_conv_method
使用预先计算的值来选择最快的 方法 (choose_conv_method
也可以使用关键字参数测量实际时间)。 因为fftconvolve
依赖于浮点数,因此有一些限制可能会强制 method=direct(有关更多详细信息,请参见choose_conv_method
文档字符串)。示例
使用 Hann 窗口平滑方波脉冲
>>> 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()