<br>On Thu, Feb 23, 2012 at 8:15 PM, Jeff Alstott <span dir="ltr">&lt;<a href="mailto:jeffalstott@gmail.com" target="_blank">jeffalstott@gmail.com</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div><span>I have a particular data set, d0, which is real:</span></div><div><span><br></span></div><div><span><div>In [72]: d0</div><div>Out[72]: </div><div>array([ 0.00907105,  0.0372916 ,  0.01402867, ..., -0.04779497,</div>



<div>       -0.07054817, -0.0436582 ])</div><div><br></div><div>It doesn&#39;t produce Hermitian output from numpy.fft.fft. </div><div><br></div></span></div><div><span><br></span></div><span>   In [87]: y0 = fft.fft(d0)</span><br>



<span>   In [88]: y0</span><br><span>   Out[88]:</span><br><span>   array([  7.77156117e-14 +0.00000000e+00j,</span><br><span>            6.89226454e-13 -1.56319402e-13j,</span><br>

<span>            1.72140080e-13 +0.00000000e+00j, ...,</span><br><span>           -7.95807864e-13 -1.13686838e-13j,</span><br><span>           -3.41060513e-13 +1.13686838e-13j,   1.25055521e-12</span><br>

<span>   -3.41060513e-13j])</span><br><span>   In [89]: y0[1].conj()==y0[-1]</span><br><span>   Out[89]: False</span><br><span>   In [90]: y0[1].conj()==y0[-2]</span><br><span>   Out[90]: False</span><br><span></span><br>

</div></blockquote><div><br>I might be missing something, but this seems like floating point rounding error to me. I don&#39;t know what your d0 really looks like, but with some random numbers, <br><br>In [1]: d0 = np.random.normal(0,1,1024)<br>
In [2]: y0 = np.fft.fft(d0)<br>In [3]: np.allclose( y0[1:].conj(), y0[-1:0:-1] )<br>Out[3]: True<br>In [4]: np.max( (y0[1:].conj() - y0[-1:0:-1]).imag )<br>Out[4]: 4.3520742565306136e-13<br>In [5]: np.max( (y0[1:].conj() - y0[-1:0:-1]).real )<br>
Out[5]: 2.957634137601417e-13<br><br>I tried this in MATLAB and the two halves are exactly equal. I would assume this means that the MATLAB FFT implementation does something extra to eliminate the rounding error for the special case of real input, whereas the NumPy FFT does not take that step. I&#39;m pretty sure the NumPy FFT is just calling FFTPACK, so you&#39;d need to check the implementation details there.<br>

<br>Cheers,<br>Aronne<br></div></div>