Как повторно использовать объект pyfftw?

Возможно, это просто мое недоразумение, но как вы повторно используете объект pyfftw?

Когда я запускаю что-то вроде следующего кода, img1_fft а также img2_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)

Я делаю что-то не так, поскольку весь смысл "планирования" заключался в том, что не нужно было реконструировать объекты pyfftw? Я хотел бы просто использовать один и тот же объект pyfftw (поскольку все мои изображения имеют одинаковый размер) и просто изменить входные данные для объекта.

1 ответ

Решение

Это по замыслу. Там нет копии выходного массива, кроме как в явном виде, поэтому img2_fft is img1_fft возвращается True,

Вы можете скопировать вывод, используя .copy()или вы можете явно установить выходной массив из вашего собственного массива.

Другие вопросы по тегам