2D 配列の場合、関数 scipy.signal.convolve2d はより高速であり、scipy.signal.fftconvolve はさらに高速になる可能性があります (配列の次元によって異なります)。
ここで、N = 100000 の同じコード
import time
import numpy as np
import scipy.signal as sg
M, N, P = 10, 100000, 20
A = np.random.randn(M, N)
B = np.random.randn(M, P)
T1 = time.time()
C = sg.convolve(A, B, 'full')
print(time.time()-T1)
T1 = time.time()
C_2d = sg.convolve2d(A, B, 'full')
print(time.time()-T1)
T1 = time.time()
C_fft = sg.fftconvolve(A, B, 'full')
print(time.time()-T1)
>>> 12.3
>>> 2.1
>>> 0.6
答えはすべて同じですが、使用される計算方法が異なるため、わずかな違いがあります (たとえば、fft と直接乗算ですが、正確な convolve2d が何を使用するかはわかりません)。
print(np.max(np.abs(C - C_2d)))
>>>7.81597009336e-14
print(np.max(np.abs(C - C_fft)))
>>>1.84741111298e-13