卷积#
- scipy.signal.convolve(in1, in2, mode='full', method='auto')[源代码][源代码]#
卷积两个 N 维数组。
将 in1 和 in2 进行卷积,输出大小由 mode 参数决定。
- 参数:
- 在1array_like
第一个输入。
- in2array_like
第二个输入。应与 in1 具有相同的维度。
- 模式str {‘full’, ‘valid’, ‘same’}, 可选
一个表示输出大小的字符串:
full
输出是输入的完整离散线性卷积。(默认)
valid
输出仅包含那些不依赖于零填充的元素。在’有效’模式下,in1 或 in2 在每个维度上都必须至少与其他一样大。
same
输出的大小与 in1 相同,相对于 ‘full’ 输出居中。
- 方法str {‘auto’, ‘direct’, ‘fft’}, 可选
一个字符串,指示用于计算卷积的方法。
direct
卷积是通过求和直接确定的,这是卷积的定义。
fft
傅里叶变换用于通过调用
fftconvolve
来执行卷积。auto
根据估计哪种方法更快,自动选择直接法或傅里叶法(默认)。更多详情请参见注释。
Added in version 0.19.0.
- 返回:
- 卷积数组
一个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()