0

私はpythonを使用して、pyfftwを使用して分割ステップフーリエ変換法を作成しています。何が起こっているのかほとんど理解できたと思いますが、1 つの変数だけを操作しようとすると、なぜこれほど多くの変数が変化するのか理解できません。

以下のコードでは、1D 配列 (complex128) から始めて、E最初に に割り当てaます。次に、時間と周波数の間を行き来する 2 つの操作があるように、DFT を計画します。

私のコード:

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

問題は、コードの 2 番目の部分に入ると、割り当てもa[:] = np.power(np.absolute(A0),2)変更さA0れているように見えることaです。

これはIz = np.power(np.absolute(A0),2) + fft_object()、私が割り当てた変数、aまたはb一時変数ではなくリンクされたままのように見える変数でも発生します。

どうしたの???

4

1 に答える 1

0

Ea(して確認E is a)です。これは、FFTWオブジェクトの 2 番目の引数が出力配列であるためです。これは、実行時に返されるものですifft_object()

A0次に、 beに割り当てますE。したがって、絶対に を変更すると、同じオブジェクトであるため、aも変更されます。A0

オブジェクトを使用する場合はFFTW、このようなことに注意する必要があります。コピーを最小限に抑えるように設計されているため、正しい配列を取得するのはあなた次第です。これをしたくない場合は、pyfftw.buildersインターフェイスを使用することをお勧めします。

于 2017-10-11T08:57:46.403 に答える