Свертка двух массивов с использованием scipy - PullRequest
2 голосов
/ 14 июля 2020

У меня есть два Numpy (сложных) массива A [t], B [t], определенных над сеткой точек «t». Эти два массива свернуты таким образом, что мне нужен третий массив C [y] = (A * B) (y), где «y» должно быть точно такими же точками, что и сетка «t». Дело в том, что оба A и B должны быть интегрированы от - \ infty до \ infty в соответствии со стандартной операцией свертки.

Я использую для этого scipy.signal.convolve, и я также хотел бы использовать fftconvolve, так как мои массивы должны быть достаточно большими. Однако когда я пробую модуль на минимальном рабочем коде, мне кажется, что я делаю что-то очень неправильно. Вот фрагмент кода, в котором я выбираю A (t) = exp (-t ** 2) и B (t) = exp (-t). Свертка этих двух функций в Mathematica дает:

C[y] = \integral_{-\infty}^{\infty} dt A[t]B[ y- t ] = sqrt(pi)*exp( 0.25 - y )

Но затем я пробую это в Python и получаю очень неправильные результаты:

import scipy.signal as scp
import numpy as np
import matplotlib.pyplot as plt
                 
delta = 0.001
t = np.arange(1000)*delta
a = np.exp( -t**2 )
b = np.exp( -t )
c = scp.convolve(a, b, mode='same')*delta 
d = np.sqrt(np.pi)*np.exp( 0.25 - t )
plt.plot(np.arange(len(c)) * delta, c)
plt.plot(t[::50], d[::50], 'o') 

Насколько я понял, «тот же» режим позволяет проводить оценку по тем же точкам исходной сетки, но это не так ... Любая помощь приветствуется!

...