0

我正在使用 python 编写使用 pyfftw 的分步傅立叶变换方法。我想我主要了解发生了什么,但我不明白为什么当我尝试只对一个变量进行操作时,我的变量会发生如此多的变化。

在下面的代码中,我从一维数组 (complex128)E开始,并最初将其分配给a. 然后我通过规划 DFT,以便我有 2 个操作在时间和频率之间来回切换。

我的代码:

a = pyfftw.empty_aligned(npts, dtype='complex128')
b = pyfftw.empty_aligned(npts, dtype='complex128')

a[:] = pyfftw.interfaces.numpy_fft.fftshift(E);

fft_object = pyfftw.FFTW(a, b)
EFT = fft_object()

ifft_object = pyfftw.FFTW(b, a, direction='FFTW_BACKWARD')
E = ifft_object()

A0 = E;
a[:] = np.power(np.absolute(A0),2)
IFT = fft_object()
b[:] = chi*IFT
Iz = np.power(np.absolute(A0),2) + ifft_object()
NLfn = A0 * Iz

问题是一旦我进入代码的第二部分,分配a[:] = np.power(np.absolute(A0),2)似乎A0a.

这也发生在Iz = np.power(np.absolute(A0),2) + fft_object(),在每种情况下,我分配的变量ab似乎保持链接而不是临时变量。

这是怎么回事???

4

1 回答 1

0

Ea(通过做检查E is a)。这是因为该FFTW对象的第二个参数是输出数组,这是您执行ifft_object().

然后你分配A0给 be E,所以当你改变时a,你也会改变A0,因为它们是同一个对象。

如果你使用FFTW对象,你需要小心这些事情。它旨在最大程度地减少副本,因此由您决定是否正确设置数组。如果你不想这样做,我建议使用pyfftw.builders界面。

于 2017-10-11T08:57:46.403 回答