convolve#
- scipy.signal.convolve(in1, in2, mode='full', метод='auto')[источник]#
Свёртка двух N-мерных массивов.
Свертка in1 и in2, с размером вывода, определяемым mode аргумент.
- Параметры:
- in1array_like
Первый вход.
- in2array_like
Второй вход. Должен иметь то же количество измерений, что и in1.
- modestr {‘full’, ‘valid’, ‘same’}, необязательный
Строка, указывающая размер вывода:
fullВыходные данные — полная дискретная линейная свёртка входных данных. (По умолчанию)
validВыходные данные состоят только из тех элементов, которые не зависят от дополнения нулями. В режиме 'valid' либо in1 или in2 должен быть как минимум таким же большим, как другой, по каждому измерению.
sameВыходные данные имеют тот же размер, что и in1, центрированный относительно вывода 'full'.
- методstr {'auto', 'direct', 'fft'}, optional
Строка, указывающая, какой метод использовать для вычисления свёртки.
directСвёртка определяется непосредственно из сумм, по определению свёртки.
fftПреобразование Фурье используется для выполнения свертки путем вызова
fftconvolve.autoАвтоматически выбирает прямой или метод Фурье на основе оценки того, какой быстрее (по умолчанию). См. Примечания для подробностей.
Добавлено в версии 0.19.0.
- Возвращает:
- convolveмассив
N-мерный массив, содержащий подмножество дискретной линейной свертки in1 с in2.
- Предупреждает:
- RuntimeWarning
Использование свертки FFT на входных данных, содержащих NAN или INF, приведет к тому, что весь вывод будет NAN или INF. Используйте method='direct', когда ваши входные данные содержат значения NAN или INF.
Смотрите также
numpy.polymulвыполняет полиномиальное умножение (та же операция, но также принимает объекты poly1d)
choose_conv_methodвыбирает наиболее быстрый подходящий метод свёртки
fftconvolveВсегда использует метод FFT.
oaconvolveИспользует метод перекрытия с добавлением для выполнения свертки, что обычно быстрее, когда входные массивы большие и значительно различаются по размеру.
Примечания
По умолчанию,
convolveиcorrelateиспользоватьmethod='auto', который вызываетchoose_conv_methodдля выбора самого быстрого метода с использованием предварительно вычисленных значений (choose_conv_methodтакже можно измерить реальное время выполнения с помощью аргумента-ключа). Посколькуfftconvolveосновывается на числах с плавающей запятой, существуют определенные ограничения, которые могут вынудитьmethod='direct'(подробнее вchoose_conv_methoddocstring).Примеры
Сглаживание прямоугольного импульса с использованием окна Ханна:
>>> 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()