scipy.signal.

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_method docstring).

Примеры

Сглаживание прямоугольного импульса с использованием окна Ханна:

>>> 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