# [Numpy-discussion] Re: Weird (wrong?) real fft 2d behavior

Andrew Jaffe a.h.jaffe at gmail.com
Wed Jan 25 02:05:03 CST 2006

Andrew Jaffe wrote:
> If I start with what I thought was an appropriate (n, n/2+1) complex
> matrix which should have a real inverse fft, and then take its real fft,
> I don't get back the original matrix.
>
> Note the presence of very small but nonzero reals in the final matrix,
> and the fact that the 2d and 4th rows are duplicates. This seems to be a
>  mistake somewhere.
>
> Or am I just misunderstanding/misremembering something about 2d real ffts?

and I should point out that
delta_rp = N.dft.real_fft2d(delta_kp)
is 'allclose' to the original delta_r (which leads me to believe that I
may indeed be misunderstanding something).

Andrew

>
> Andrew
>
>
> In [41]: dims=(4,4)
>
> In [42]: delta_k = aniso.dft_realizn(dims, P)
>          #### this just makes an appropriate matrix
>
> In [43]: delta_k
> Out[43]:
> array([[-0.    +0.j    ,  0.5904+0.0429j,  0.9063+0.j    ],
>        [-0.221 +0.j    ,  0.4169+0.4602j, -0.6909+0.j    ],
>        [ 0.9059+0.j    , -0.8037+0.2604j,  1.835 +0.j    ],
>        [ 1.7436+0.j    , -0.2382+0.221j , -0.0607+0.j    ]])
>        #### 16 real numbers
>
> In [44]: delta_r = N.dft.inverse_real_fft2d(delta_k)
>
> In [45]: delta_r
> Out[45]:
> array([[ 0.2718, -0.0956,  0.2805,  0.1505],
>        [ 0.0297, -0.0533, -0.259 ,  0.0561],
>        [ 0.1308, -0.2096,  0.2288, -0.3041],
>        [ 0.0895,  0.1105, -0.3188, -0.1076]])
>
> In [46]: delta_kp = N.dft.real_fft2d(delta_r)
>
> In [47]: delta_kp
> Out[47]:
> array([[ 0.     +0.00e+00j,  0.5904 +4.2938e-02j,  0.9063 +0.0000e+00j],
>        [ 0.7613 +5.5511e-17j,0.4169 +4.6020e-01j, -0.3758 +5.5511e-17j],
>        [ 0.9059 +0.0000e+00j,-0.8037+2.6038e-01j, 1.835  +0.0000e+00j],
>        [ 0.7613 -5.5511e-17j,-0.2382+2.2099e-01j,-0.3758-5.5511e-17j]])
>
> In [48]: N.__version__
> Out[48]: '0.9.5.1982'
> ------------------------