title: What is the difference between numpy.fft.fft and numpy.fft.rfft?
body: <p>The documentation says that <code>np.fft.fft</code> does this: </p>
  
  <blockquote>
    <p>Compute the one-dimensional discrete Fourier Transform.</p>
  </blockquote>
  
  <p>and <code>np.fft.rfft</code> does this:</p>
  
  <blockquote>
    <p>Compute the one-dimensional discrete Fourier Transform for real input.</p>
  </blockquote>
  
  <p>I also see that for my data (audio data, real valued), <code>np.fft.fft</code> returns a 2 dimensional array of shape (number_of_frames, fft_length) containing complex numbers.</p>
  
  <p>For <code>np.fft.rfft</code> returns a 2 dimensional array of shape (number_of_frames, ((fft_length/2) + 1)) containing complex numbers. I am led to believe that this only contains <em>nonredundant FFT bins</em>.</p>
  
  <p>Can someone explain in more depth the difference between the commands and why the shape of the returned array is different. Thank you.</p>