convolve#
- scipy.signal.convolve(in1, in2, mode='full', method='auto')[源代码]#
卷积两个 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
一个 N 维数组,包含 in1 与 in2 的离散线性卷积的子集。
- 警告:
- 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
文档字符串)。示例
使用汉宁窗平滑方波
>>> 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()