Python中稀疏2D数组与另一2D数组的快速卷积

Python中稀疏2D数组与另一2D数组的快速卷积,python,numpy,fft,convolution,Python,Numpy,Fft,Convolution,我有两个2D数组(比如,A和B),必须经常计算它们之间的卷积;这个操作是我代码的瓶颈A是稀疏的,从一个卷积到另一个卷积不断变化,而B是密集的,但在运行过程中是恒定的 目前,我正在使用numpy执行以下操作: result = np.fft.ifft2(np.fft.fft2(A)*B_FT) 其中B_FT=np.fft.fft2(B)是B的傅里叶变换,只计算一次 我的问题是,有没有办法利用a是稀疏的这一事实,使卷积运算更快?如果A是稀疏的,那么在直接空间(而不是傅立叶空间)中计算卷积必须快得多

我有两个2D数组(比如,
A
B
),必须经常计算它们之间的卷积;这个操作是我代码的瓶颈
A
是稀疏的,从一个卷积到另一个卷积不断变化,而
B
是密集的,但在运行过程中是恒定的

目前,我正在使用
numpy
执行以下操作:

result = np.fft.ifft2(np.fft.fft2(A)*B_FT)
其中
B_FT=np.fft.fft2(B)
B
的傅里叶变换,只计算一次


我的问题是,有没有办法利用
a
是稀疏的这一事实,使卷积运算更快?如果
A
是稀疏的,那么在直接空间(而不是傅立叶空间)中计算卷积必须快得多,但是,由于Python解释器的开销,它可能不值得。因此,我想知道是否有任何已编译的库支持它。

您尝试过吗?我尝试过,看起来比我当前使用的方法慢。此外,没有封装操作的选项,即考虑周期性数组。如果你的数组非常稀疏(例如,在<代码> 0 < /COS> S的海洋中,有几个<代码> 1代码/代码> s,并且卷积不太宽(即在空间域中受到限制),那么除了稀有<代码> 1 < /代码> s彼此接近(需要碰撞检测),每个
1
仅成为
1
附近卷积波形的副本。问题是卷积的物理意义是什么,它是否提供了用数组B卷积单个
1
无法获得的有用见解。另请参见和