Я хочу познакомиться со свертками на основе Фурье. Поэтому я создал небольшой пример, используя numpy.fft
и scipy.signal.convolve
. Однако результаты двух операций разные, и я не знаю почему. У кого-нибудь есть идея?
Я уже пробовал использовать разные режимы scipy.signal.convolve
.
Пример:
import numpy as np
from scipy.signal import convolve
# Generate example data
data = np.array([1, 1, 1, 1, 1, 1])
kernel = np.array([0, 1, 2, 1, 0, 0])
# Using scipy.signal.convolve
A = convolve(kernel, data, mode='full')
B = convolve(kernel, data, mode='valid')
C = convolve(kernel, data, mode='same')
# Using the convolution theorem
D = np.fft.ifft(np.fft.fft(kernel) * np.fft.fft(data))
Результаты:
A = array([0, 1, 3, 4, 4, 4, 4, 3, 1, 0, 0])
B = array([4])
C = array([3, 4, 4, 4, 4, 3])
D = array([4.+0.j, 4.+0.j, 4.+0.j, 4.+0.j, 4.+0.j, 4.+0.j])