我希望能够使用更大的数组来实现这个功能,但为了方便理解,我将使用一个较小的示例。
假设我有以下数组:
A = [[0, 0, 100],
[0, 0, 0],
[0, 0, 0]]
如果我想计算这个数组与另一个数组的相关性,可以通过乘以相应的条目来实现。例如,A * A 等于 A(1 * 1 = 1,其他地方都是零)。我读到快速傅里叶变换可以用于加速大型数组的操作。从我所读的内容中,如果我想要像 A*B 这样乘两个数组 A 和 B,我可以使用以下方法更快地完成(在 Python 中使用 numpy):
a = np.conj(np.fft.fftn(A))
b = np.fft.fftn(B)
c = np.fft.ifft(a*b)
因此,实际上需要对A进行FFT,对B进行FFT,将两个结果相乘,然后获取该结果的反演。然而,我尝试了使用给定的A的情况,将其与自身相乘。我希望反向乘法会给我。
[[0, 0, 10000],
[0, 0, 0 ],
[0, 0, 0 ]]
然而,我得到了一些不同的东西,更接近于……
[[10000, 0, 0],
[10000, 0, 0],
[10000, 0, 0]]
有人知道发生了什么吗?抱歉,我猜我对快速傅里叶变换有些误解。
c
)中使用np.fft.ifftn
。 - Joe Kingtonfft
/fft2
/fftn
等函数都接受一个形状参数,如果你传递想要填充的形状,它将处理零填充。 - Joe Kington