如何重用 pyfftw 对象?

How to resuse a pyfftw object?

也许这只是我的误解,但是你如何重用一个pyfftw对象?

当我 运行 类似下面的代码时,img1_fftimg2_fft 是相同的,尽管接收到不同的输入。当我取消注释重建 fftwObj 的行时,我得到了所需的输出。

inArray = pyfftw.empty_aligned(optimalSize, dtype='complex64')
inArray[ 0:img1.shape[0] , 0:img1.shape[1] ] = img1;
fftwObj = pyfftw.builders.fft2(inArray)
img1_fft = fftwObj(inArray)

inArray = pyfftw.empty_aligned(optimalSize, dtype='complex64')
inArray[ 0:img2.shape[0] , 0:img2.shape[1] ] = img2;
# fftwObj = pyfftw.builders.fft2(inArray)
img2_fft = fftwObj(inArray)

我是不是做错了什么,因为 "planning" 的重点是不必重建 pyfftw 对象?我想只使用相同的 pyfftw 对象(因为我所有的图像都是相同大小的)并且只需更改对象的输入。

这是设计使然。除了显式之外,没有输出数组的副本,所以 img2_fft is img1_fft returns True.

您可以使用 .copy() 复制输出,或者您可以从您自己的数组中显式 set the output array